My Rails 4应用程序有一个主题模型,允许多对多的自引用关系。我在创建多对多自连接模型时基于this fantastic answer设置模型,如果我手动填充关系表,它似乎有效。为了问题的目的,让我们使用该模型:
user.rb:
class User < ActiveRecord::Base
# follower_follows "names" the Follow join table for accessing through the follower association
has_many :follower_follows, foreign_key: :followee_id, class_name: "Follow"
# source: :follower matches with the belong_to :follower identification in the Follow model
has_many :followers, through: :follower_follows, source: :follower
# followee_follows "names" the Follow join table for accessing through the followee association
has_many :followee_follows, foreign_key: :follower_id, class_name: "Follow"
# source: :followee matches with the belong_to :followee identification in the Follow model
has_many :followees, through: :followee_follows, source: :followee
end
follow.rb:
class Follow < ActiveRecord::Base
belongs_to :follower, foreign_key: "follower_id", class_name: "User"
belongs_to :followee, foreign_key: "followee_id", class_name: "User"
end
一旦我手动填充Follow表,我就可以使用@ user.followers和@ user.followees等方法从模型中成功获取数据。
我遇到的问题是如何使用ActiveRecord以&#34; Rails方式正确创建关注关系(关注者或关注者)。&#34;
在控制器中,创建新的用户并为其分配现有 Followee (或多个 Followees )的代码是什么样的?同时使用嵌套属性?
我一直在尝试从视图中传递变量的方法(多选输入),如:
user_params = {"user"=>"name","followees_attributes"=>{"id"=>{"1","2"}}}
然后在users_controller.rb中:
@user = User.new(user_params)
但没有运气,而且我不确定我是否在这里(Rails的新手)。这感觉太简单了,但我对Rails感觉很多。 。呵呵。如果我关闭但您需要查看错误消息,请告知我们。
修改
我不确定这是不是&#34;对&#34;这样做的方式(感觉不是这样),但我通过将嵌套的属性变量与模型分离,然后手动创建关系来实现它。
params = {"user"=>"name"},{"followees_attributes"=>{"id"=>{"1","2"}}}
然后在users_controller.rb中:
@user = User.new(user_params)
@user.followees << User.find(1)
@user.followees << User.find(2)
@user.save
当然,您需要在那里进行一些重复检查,以确保关系不存在,但从根本上说,这可以完成工作。那里有更好的解决方案吗?