如何在一个页面上处理多种表单?

时间:2009-10-28 19:26:20

标签: ruby-on-rails forms

如果我有一个包含多种现有记录形式的单页:

index.html.haml

- for selection in @selections
  - form_for selection, :method => :put do |form|
    = form.collection_select :user_id, @current_account.users, :id, :full_name

然后提交并更新操作:

selections_controller.rb

def update
  selection = Selection.find(params[:id])
  if selection.update_attributes(params[:selection])
    flash[:notice] = "Save!"
    redirect_to selections_path
  else
    flash[:errors] = "Errors"
    render :index
  end
end

如果我在同一页面上有这些多个表单,如何处理错误消息。 即如果我想使用:

selection.errors.on(:user_id)

其中一种表格?

1 个答案:

答案 0 :(得分:1)

通常你会想要使用error_msg_for帮助器。

= error_messages_for object

但是在你的情况下,因为你根据一个信号的更新渲染多个表格,你还有一些工作要做。

首先,您的更新操作应重新填充@selections,并将无法更新的选择作为实例变量提供给视图。

def update
  @selection = Selection.find(params[:id])
  if @selection.update_attributes(params[:selection])
    flash[:notice] = "Save!"
    redirect_to selections_path
  else
    @selections = Selection.find ....
    flash[:errors] = "Errors"
    render :index
  end
end

接下来将此信息过滤到表单中。

index.html.erb

- for selection in @selections
  - form_for selection, :method => :put do |form|
    = error_messages_for form.object if form.object.id = @selection.id
    = form.collection_select :user_id, @current_account.users, :id, :full_name