我有一个模型Feed,它拥有并属于许多FilteredUsers。在这种情况下,我通过has_many:through relationship实现了它。
class Feed < ActiveRecord::Base
has_many :denials, :dependent => :destroy
has_many :filtered_users, :through => :denials
我想创建一个记录,如果它不存在,或者如果它存在则找到该对象。当我尝试使用find_or_initialize_by(或find_or_create_by)时会抛出一个异常,说undefined method 'feed_id=' for <FilteredUser..
以下是代码:
feed = Feed.find(params[:id])
user = feed.filtered_users.find_or_initialize_by_user_url(params[:user_url])
if params[:status] == "block"
feed.filtered_users << user
else
feed.filtered_users.delete(user)
end
feed.save
有关如何解决此问题或如何解决这个问题的任何建议DRYly?
谢谢!
答案 0 :(得分:1)
首先,因为它是has_many :through
关系,初始化无法知道新denial
应与哪个filtered_user
相关联。如果您要使用find_or_initialize_by
,则需要在与denial
相关联的特定feed
上运行它。
构建一个新的filtered_user并将其与特定的拒绝关联。
其次,同意ErsatzRyan,一般逻辑似乎有点偏。
答案 1 :(得分:0)
首先检查参数[:status]然后做你需要做的事情会不会更容易?
feed = Feed.find(params[:id])
if params[:status] == 'block'
feed.filtered_users.build(:user_url => params[:user_url])
else
feed.filtered_users.find_by_user_url(params[:user_url]).delete
end
feed.save
警告这是未经测试的空气编码