attr_accessible可以接受对象而不是模型属性吗?

时间:2013-03-27 09:48:48

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我正在尝试理解预先构建的应用程序:

class Friendship < ActiveRecord::Base
   attr_accessible :status,:user,:friend
   belongs_to :user
   belongs_to :friend, :class_name => "User",:foreign_key => "friend_id"
end

我对他提供attr_accessible:user的{​​{1}}部分感到困惑,因为它们不是友谊模型中的属性。这只是写:friend:user_id的简短方法,还是他实际上提供了friend_id对象和:user对象?如果它们确实是物体,那意味着什么?

2 个答案:

答案 0 :(得分:1)

这不是写user_id的简短方法。 attr_accessible表示您可以在创建友谊时批量指定一位用户。这意味着您可以 attr_accessible :status,:user,:friend

Friendship.create! user: user1, friend: friend1

没有 attr_accessible会引发错误,因为用户和朋友的批量分配已被停用

答案 1 :(得分:1)

不是分配user_id或friend_id,而是允许您分配用户或朋友:

Friendship.create!(:status=>"active", :user=>current_user, :friend=>@friend)

使用attr_accessible :user_id,:friend_id,您可以这样做:

Friendship.create!(:status=>"active", :user_id=>current_user.id, :friend_id=>@friend.id)

简而言之,两种方式都有效地保存了user_id和friend_id。只是采用不同的方式。

注意:您应该只能访问要分配的属性,否则您可能会创建质量分配漏洞。