1

私は、次のようなビルド済みのアプリを理解しようとしています。

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:friend、それらが友情モデルの属性ではないため、私は混乱しています。それは書くための短い方法ですか、:user_idそれともfriend_id彼は実際に:userオブジェクトとオブジェクトを提供してい:friendますか?それらが実際にオブジェクトである場合、それはどういう意味ですか?

4

2 に答える 2

1

それは書くための短い方法ではありませんuser_idattr_accessibleつまり、友情を作成するときにwhileユーザーを一括割り当てできます。これはあなたと一緒 attr_accessible :status,:user,:friendにできることを意味します

Friendship.create! user: user1, friend: friend1

それがないattr_accessible、ユーザーと友達の一括割り当てが無効になるため、エラーがスローされます。

于 2013-03-27T09:57:55.293 に答える
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を効果的に保存できます。それを行うためのちょうど異なる方法。

注:割り当てる属性のみにアクセスできるようにする必要があります。そうしないと、一括割り当ての脆弱性が作成される可能性があります。

于 2013-03-27T09:58:03.837 に答える