2014年1月21日 星期二

rails 讓使用者可以訂閱 RSS





1.在LinksController 

def feed
@links = Link.all(:select => "title, url, id, description, updated_at", :order                  => "updated_at DESC", :limit => 20) 
respond_to do |format|
   format.html
   format.rss { render :layout => false }
end
end
2.新增app/view/links/feed.rss.builder
xml.instruct! :xml, :version => "1.0" 
xml.rss :version => "2.0" do
  xml.channel do
    xml.title "learn rails"
    xml.description "study"
    xml.link links_url
    for link in @links
      xml.item do
        xml.id link.id
        xml.title link.title
        xml.description link.description
        xml.pubDate link.updated_at.to_s(:rfc822)
        xml.link link.url
      end
    end
  end
end
3.html連結
<%= link_to("rss" , feed_links_path(rss))%>

如此 即可產生一可讓使用者訂閱之rss

acts_as_commentable 在每則網址下面留言

使用者可以在每則網址下面留言 https://github.com/jackdempsey/acts_as_commentable



gem 'acts_as_commentable'
rails g comment
rake db:migrate
1.新增 CommentsController

class CommentsController < ApplicationController
def create
@link = Link.find(params[:link_id])
comment = Comment.new( :title => "", :comment => params[:comment][:comment])
if current_user != nil
comment.user_id = current_user.id
end
logger << params[:comment]
@link.add_comment comment
redirect_to root_path
end
end
:comment => params[:comment][:comment])  這邊這樣用是因為 view 用simple_form_for 後來帶過來的是 comment={comment={msg}}                                  之後再研究看看正常寫法 

2. view

<%= simple_form_for(@comment, :url => comments_path(@comment, :link_id => link )) do |f| %>
<div>
 <%= f.input :comment , :label => "--" %>
 <%= f.button :submit , :class => "btn btn-info"%>
</div>
<% end %>










2014年1月20日 星期一

embedly- 使用者填入網址,網站自動抓標題和簡介


使用者可以填入網址,網站自動抓標題和簡介 http://embed.ly/docs/tutorials/jquery_preview

參考解法
Xdite 解法
由後端抓


1. 安裝 embedly  https://github.com/embedly/embedly-ruby
gem install embedly

2.修改LinksController
   產生時要先有url , 後續再修改model 
def create
  @link = current_user.links.build(link_params)
  @link.save

  redirect_to root_path
 end


 private 
 def link_params
  params.require(:link).permit(:url,:user_id)
 end
3. 修改link model
   用after_create , 再來update由embedly抓回來的資料


class Link < ActiveRecord::Base

 belongs_to :user
 after_create :update_from_embedly

   def update_from_embedly

     link = self

     embedly_api = Embedly::API.new(:key => Setting.embedly_key)
     embedly_objs = embedly_api.oembed :url => link.url
     embedly_obj = embedly_objs[0]

     response_data = embedly_obj.marshal_dump

     link.title             =  response_data[:title]
     link.link_type         =  response_data[:type]
     link.provider_name     =  response_data[:provider_name]
     link.provider_url      =  response_data[:provider_url]
     link.description       =  response_data[:description]
     link.thumbnail_url     =  response_data[:thumbnail_url]
     link.thumbnail_width   =  response_data[:thumbnail_width]
     link.thumbnail_height  =  response_data[:thumbnail_height]

     link.save
   end

end

2014年1月19日 星期日

Settingslogic


用Settingslogic來整理開發的config 設定

使用這個
https://github.com/binarylogic/settingslogic


安裝
gem install settingslogic


使用
1. define class

放在/app/model/setting.rb 下
連結到"#{Rails.root}/config/config.yml" 這個設定
# -*- encoding : utf-8 -*-
class Setting < Settingslogic
  source "#{Rails.root}/config/config.yml"
  namespace Rails.env
end
2.撰寫設定檔config.yml
defaults: &defaults

  app_name: "amyilake"

  domain: "http://amyilake.dev"    

  facebook_app_id: 

  facebook_secret: 

  hipchat_token: 

  hipchat_room_name: 

  admin_emails: 

    - ""

  google_analytics_key: ""

  default_logo_url: "/logo.png"

  email_sender: ""

  embedly_key: ""



development:

  <<: *defaults


test:

  <<: *defaults


production:

  <<: *defaults
要注意yml格式  不能用tab
要用兩個空格 注意縮排
所以複製貼上常會有問題






2014年1月8日 星期三

sed , awk



切割文件
awk '/^01/{x="'file.'"++i;}{print > x;}' file
此指令會以01開頭的行數為依據  切割檔案
原檔案file 切割產生  file.1 ,file.2  ............


刪除行數
sed -e '1d' file > file-temp
刪除file的第一行 存在file-temp

其他
shell中单引号、双引号、反引号的区别(转自互联网)
http://blog.csdn.net/wyyzsl212328/article/details/8501650