如何通过渲染调用传递参数?

时间:2013-05-02 16:10:16

标签: ruby-on-rails parameters render

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

4 个答案:

答案 0 :(得分: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 %>

答案 1 :(得分:0)

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

答案 2 :(得分: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

答案 3 :(得分:0)

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

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