如何使用嵌套属性在多对一自引用模型中创建/更新Rails中的对象?

时间:2015-10-09 00:29:42

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

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

当然,您需要在那里进行一些重复检查,以确保关系不存在,但从根本上说,这可以完成工作。那里有更好的解决方案吗?

0 个答案:

没有答案