Rails ассоциации не могут массово присвоить внешний ключ - PullRequest
3 голосов
/ 23 декабря 2011

Может быть, я делаю это неправильно, но вот моя проблема:

@restaurant = current_user.restaurants.build(params[:restaurant])

Это создает новый ресторанный объект, где user_id установлен в current_user.id.Это работает, только если вы установили attr_accessible :user_id в модели ресторана.Если нет, вы получаете

ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes:
user_id

. Я хочу, чтобы user_id был определен через .build, но в то же время я не хочу attr_accessible :user_id, потому что тогда кто-то можетустановить для user_id этой записи идентификатор другого пользователя, что было бы плохо !!

Я думал, что внешние ключи были исключены из этой защиты массового назначения и были применены, если вы создаете новый объект через ассоциацию .build или .create методы.

Есть предложения?Я не хочу возвращаться к

@restaurant = current_user.restaurants.build(params[:restaurant])
@restaurant.user = current_user

, потому что это побеждает цель .build

1 Ответ

3 голосов
/ 23 декабря 2011

Вы используете Rails 3.2.0.rc1?Это известная ошибка github.com/rails/rails/issues/4051 (устранена)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...