2013-05-02 53 views
0

這是一個簡單的問題。如果表格填寫不正確,我會在創建操作中致電render 'new',以便人員可以正確填寫表格。不幸的是,這會導致URL中的參數丟失。我如何將它們與渲染調用一起傳遞?如何通過渲染調用傳遞參數?

回答

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 %> 
0

通常,參數作爲隱藏字段傳遞給表單本身,以便您可以在創建操作中從它們中獲取。

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 
0

更好的方法是你定義它們已經隱藏字段,並宣佈隱藏字段作爲模型attr_accessor,但如果你堅持應該只使用後的參數,你可以寫,即使通過獲取參數所有params在你的表單中動作如下:

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