2013-02-08 3 views
0

Существует множество примеров отношений между моделями в Rails, но все они, похоже, не учитывают attr_accessable часть модели.модели в attr_accessible

Я ищу несколько лучших практик вокруг attr_accessible, и я нахожу противоречивые советы. Can/should I:

- положить внешние ключи в attr_accessible?

Class Post 
    attr_accessible :name, :user_id 

    belongs_to :user 
end 
Class User 
    attr_accessible :first, :last 

    has_many :posts 
end 

- положить все модели в attr_accessible?

Class Post 
    attr_accessible :name, :user 

    belongs_to :user 
end 
Class User 
    attr_accessible :first, :last 

    has_many :posts 
end 

ответ

2

Вопреки тому, что говорит Kaeros, я бы на самом деле советую против допуска иностранных ключевых полей для массовых переуступки. Причина в том, что вы открываете простой способ для кого-то отправить другой user_id при добавлении сообщения. Вероятно, поэтому примеры, которые вы находите, не включают внешние ключи.

Лучший способ обойти это использовать метод сбора строитель при добавлении новой записи для пользователя:

user.posts.create(params[:post]) 

Если вы решили не следовать этому совету, то это действительно зависит от того, как вы являются массовое присвоение значений. Если ваш хэш содержит :user_id, тогда вы должны сделать доступным, если он содержит :user, идите с ним. Если вы не уверены, вы всегда можете сделать оба доступными.

+1

И проблема безопасности github несколько месяцев назад была чужой ключевой штукой - при обновлении ключа ssh было ошибочно принято задавать user_id (или эквивалент), то есть с кем принадлежал ключ, с тем результатом, добавьте свой ключ другому пользователю –

0

Использование внешних ключей в attr_accessible кажется нормальным и по умолчанию для меня. Вы можете видеть here, что руководство api также использует эту форму.

Добавление имен моделей в attr_accessible также сработало для меня.

Я предпочитаю первый вариант, поэтому я легко узнать, что я имею дело с внешними ключами