2012-10-30 57 views
2

我試圖調用一個方法,當點擊一個按鈕去使用Twitter gem獲取推文,並將其存儲在我的數據庫中。Rails button_to不傳遞參數中的id哈希

我有一個稱爲贊助商(其包括列存儲Twitter用戶名)模型,和一個稱爲Sponsortweet模型:

模型/ sponsor.rb:

class Sponsor < ActiveRecord::Base              
    attr_accessible :facebook, :name, :twitter           
    has_many :sponsortweets, dependent: :destroy           
                          validates :name, presence: true, uniqueness: { case_sensitive: false }     
    VALID_TWITTER_REGEX = /\A^([a-zA-Z](_?[a-zA-Z0-9]+)*_?|_([a-zA-Z0-9]+_?)*)$/   
    validates :twitter, format: { with: VALID_TWITTER_REGEX },        
         uniqueness: { case_sensitive: false }        


    def create_tweet                  
    tweet = Twitter.user_timeline(self.twitter).first         
    self.sponsortweets.create!(content: tweet.text,          
           tweet_id: tweet.id,          
           tweet_created_at: tweet.created_at,      
           profile_image_url: tweet.user.profile_image_url,   
           from_user: tweet.from_user,)        
    end                     
end 

模型/ sponsortweet.rb :

class Sponsortweet < ActiveRecord::Base 
    attr_accessible :content, :from_user, :profile_image_url, :tweet_created_at, :tweet_id 
    belongs_to :sponsor 
    validates :content, presence: true 
    validates :sponsor_id, presence: true 

    default_scope order: 'sponsortweets.created_at DESC' 
end 

在控制器/ sponsors_controller.rb:

def tweet 
     @sponsor = Sponsor.find_by_id(params[:id]) 
     @sponsor.create_tweet 
    end 

在我的routes.rb相關線路:

match 'tweet', to: 'sponsors#tweet', via: :post

在我看來(瀏覽量/贊助商/ show.html.haml):

= button_to :tweet, tweet_path

有了這個代碼,我得到單擊按鈕時出現以下錯誤: undefined method create_tweet'for nil:NilClass`

If I chan ge使用find(而不是find_by_id),錯誤是: Couldn't find Sponsor without an ID

...這讓我覺得一個ID沒有被傳遞,因爲據我所知,使用find會引發一個錯誤,而find_by_id返回nil。

我應該改變什麼才能讓ID通過?

回答

2

你需要通過id參數與路徑幫手:

= button_to :tweet, tweet_path(:id => @sponsor.id) 

如果你不希望它在查詢字符串:

= form_tag tweet_path do |f| 
    = hidden_field_tag :id => @sponsor.id 
    = submit_tag "Tweet" 

這做同樣的事情作爲你的button_to,但是會向生成的表單添加隱藏字段。

+0

有沒有辦法傳遞'id'參數不在URL的查詢字符串中?這可以工作,但會產生一個URL爲'/ tweet?id = 1'的URL。 –

+0

您可以製作一個將其作爲隱藏字段提交併包含按鈕的表單。 –