0

这是一个简单的问题。如果表格填写不正确,我会调用render 'new'我的创建操作,以便该人可以正确填写表格。不幸的是,这会导致 URL 中的参数丢失。如何将它们与渲染调用一起传递?

4

4 回答 4

1

您的操作方法应该获取参数并将其分配给实例变量。本例中的模型称为 note。

def create
    @note = Note.new(params[:note])
    respond_to do |format|
      if @note.save
        format.html { redirect_to @note, notice: 'Note was successfully created.' }
      else
        format.html { render action: "new" }
      end
    end
  end

然后实例变量在您的视图中可见:

<%= form_for(@note) do |f| %>
   <%= f.text_field :name %>
   <%= f.submit %>
<% end %>
于 2013-05-02T16:53:22.977 回答
0

通常,参数作为表单本身的隐藏字段传递,以便您可以在创建操作中获取它们。

于 2013-05-02T16:22:15.483 回答
0

渲染调用应该使用带有“@”的变量(也就是实例变量)。确保#create 具有与#new 相同的实例变量。

class ExampleController < ApplicationController
  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    if @user.valid?
      @user.save
      redirect_to "/"
    else
      render 'new'
    end
  end
end
于 2013-05-02T16:26:52.093 回答
0

更好的方法是您定义它们具有隐藏字段并在模型中将隐藏字段声明为 attr_accessor,但是如果您坚持传递 get 参数,即使应该只使用 post 参数,您也可以在表单操作中编写所有参数,例如:

form_for @event, :url => events_path+'?getvar=1' do |f|

于 2013-05-02T16:44:01.550 回答