我試圖調用一個方法,當點擊一個按鈕去使用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通過?
有沒有辦法傳遞'id'參數不在URL的查詢字符串中?這可以工作,但會產生一個URL爲'/ tweet?id = 1'的URL。 –
您可以製作一個將其作爲隱藏字段提交併包含按鈕的表單。 –