2

我有一个模型 Feed,它拥有并属于许多 FilteredUser。在这种情况下,我通过 has_many :through 关系实现了它。

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 解决此问题的任何建议?

谢谢!

4

2 回答 2

1

首先,因为它是一个has_many :through关系,所以初始化无法知道应该与哪个denialnew关联。filtered_user如果要使用find_or_initialize_by,则需要在特定denial的即与feed.

构建一个新的过滤用户并将其与特定的拒绝相关联。

其次,同意 ErsatzRyan 的观点,一般逻辑似乎有点不对劲。

于 2009-11-08T23:19:28.137 回答
0

先检查 params[: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

警告这是空气编码未测试

于 2009-06-17T13:46:33.887 回答