当单击按钮以使用 Twitter gem 获取推文并将其存储在我的数据库中时,我试图调用一个方法。
我有一个名为 Sponsor 的模型(其中包括一个存储 twitter 用户名的列)和一个名为 Sponsortweet 的模型:
模型/赞助商.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
在 controllers/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
在我看来(views/sponsors/show.html.haml):
= button_to :tweet, tweet_path
使用此代码,单击按钮时出现以下错误:
undefined method
create_tweet' for nil:NilClass`
如果我改用 find(而不是 find_by_id),错误是:
Couldn't find Sponsor without an ID
...这让我认为没有传递 ID,因为据我所知,使用 find 会引发错误,而 find_by_id 返回 nil。
我应该更改什么以使 ID 被传递?