2011-01-18 2 views
4

У меня есть Rfq contoller Я создаю новый или обновляю существующие Rfqs, когда я создаю или обновляю объект, сохраняется, что я хочу, так как у меня есть число котировок params i хотите обновить таблицу line_items кавычками в параметрах [: кавычки] в столбце quote_price после сохранения RfqsRails Как передать параметры с контроллера на after_save внутри модели

0 Я знаю, что это смущает, но у кого есть ror-ish, у вас должен быть некоторый намек, который я хочу спросить.

+0

Вы можете сразу получить доступ к 'Params [: цитаты]' от after_save блока? – Dogbert

+0

Как вы можете объяснить на примере? –

+4

'params' напрямую не доступен из модели, я не думаю. –

ответ

2

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

То есть, в контроллер:

if @foo.save 
    # Update line_items using params[:quotes] 
end
1

Я думаю, что вы хотите быть в состоянии иметь 1 вид, что позволяет экономить как главный объект и все дочерние объекты. Если нет, не обращайте внимания.

В рельсах, это называется "nested_attributes"

вы добавить к вашей модели:

accepts_nested_attributes_for :quotes 
# assuming you have 
has_many :quotes 

, а затем в вашем представлении формы:

<% form.fields_for :quotes do |child_form| %> 
    <%= child_form.text_field :name %> 
<% end %> 

Проверьте это в блоге Райана: Nested Attributes

11

Если вы пытаетесь использовать params хэш в вашей модели, вы нарушаете принципы MVC. Модель должна стоять наедине с аргументами. Если вы пытаетесь сделать следующее:

# controller 
Model.foo 

# model 
def foo 
    params[:bar].reverse! 
end 

Вы должны сделать следующее вместо:

# controller 
Model.foo(params[:bar]) 

# model 
def foo(foobar) 
    foobar.reverse! 
end 
Смежные вопросы