Могу ли я изменить порядок назначения для новых экземпляров модели в рельсах - PullRequest
1 голос
/ 13 сентября 2009

У меня есть два атрибута, a_value и b_id. (Не их настоящие имена.) 'A_value' хранится в файловой системе, используя некоторую информацию из модели 'B', на которую ссылается 'b_id'.

Итак, мой объект params выглядит так:

params[:foo] = {"a_value"=>"nifty value","b_id"=>"38"}

например.

Теперь в foo_controller.rb:

foo = Foo.new(params[:foo])

Но это не так.

ActiveRecord::RecordNotFound: Couldn't find Foo without an ID

В Foo.a_value = (значение) у меня есть

...
self.my_path = self.b_id.the_path
...

Похоже, что Rails выполняет назначения в алфавитном порядке и паникует, когда b_id там нет, даже если он присутствует в хэше params и проходит проверку.

Могу ли я форсировать порядок, в котором выполняется это назначение? Или я могу создать before_filter, который будет выполнять назначение b_id до того, как произойдет остаток массового назначения?

1 Ответ

0 голосов
/ 13 сентября 2009

Я понял это!

Способ сделать это следующим образом:

foo = Foo.new
foo[:b_id] = params[:foo][:b_id]
foo.update_attributes(params[:foo])
if foo.save...

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

Было бы лучше, если бы вы могли указать частичный порядок для ваших атрибутов без необходимости переименовывать их.

...