Проблема с обновлением записи, имеющей ассоциацию в Rails - PullRequest
0 голосов
/ 01 декабря 2010

Я не могу обновить запись, связанную с Rails.

Например, у меня есть модель Post и модель User.В post.rb я включил ассоциацию belongs_to :user.

Если я хочу изменить поле user_id для существующей записи Post, оно не будет работать.

p = Post.find(1)
p.user_id = 5
p.save

выше не изменяет поле user_id записи Post на 5. Когда я удаляю связь, вышеуказанный код работает.

Есть ли способ обновить поле user_id, не удаляя связь?

Спасибо!

Тим

Ответы [ 2 ]

1 голос
/ 06 декабря 2010

Вы писали:

Эти примеры выглядят так, как будто они должны работать, но по какой-то причине user_id остается неизменным. Может быть, это как-то связано с проверками

Вы можете легко проверить, связано ли это с проверками, заменив "save" на "save!"

Первый просто возвращает false, если какая-либо из проверок завершилась неудачей, тогда как последний вызовет исключение:

p = Post.find(1)
p.user = User.find(5)
p.save!

В качестве альтернативы, вы также можете сделать следующее в консоли Rails:

>> p = Post.find(1)
...
>> p.user = User.find(5)
...
>> p.valid?
... 
>> # will be either true or false, depending on validations
>> p.errors.full_messages
... 
>> # will be either [] or else a non-empty array of all validation failures
>> _

Удачи!

1 голос
/ 01 декабря 2010

«Правильный» способ сделать это - позволить Rails выполнить всю тяжелую работу следующим образом:

p = Post.find(1)
p.user = User.find(5)
p.save

..., которая будет работать при условии, что все проверки выполнены.

В качестве альтернативы:

Post.find(1).update_attribute(:user_id, 5)

... хотя вы, вероятно, хотите подумать дважды, прежде чем использовать последний!: -)

Петр

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