2013-04-29 55 views
1

我有一個Rails應用程序,其中包括Requests和Workorders表。Rails從視圖向表單傳遞信息

我在Request show頁面上有一個New Workorder按鈕。我需要將請求中的信息傳遞給Workorder - 例如Request.id。

我目前使用flash來做到這一點。這裏是請求顯示頁面上的按鈕:

<%= link_to 'New Work Order', new_workorder_path, :class => 'btn btn-primary', :onclick => (flash[:request_id] = @request.id %> 

在新工單的形式,我有:

<% if flash[:request_id] != nil %> 
    <%= f.hidden_field :request_id, :value => flash[:request_id] %> 

這工作。但不總是。我一直無法弄清楚它爲什麼有時會失敗。

有沒有更好的方式來傳遞這些數據?

感謝您的幫助!

UDPDATE1

有時我需要提出相當多的數據字段。例如:

 <%= link_to 'Follow-up Work Order', new_workorder_path, :class => 'btn btn-primary', :onclick => (flash[:workorder_id] = @workorder.id, flash[:client_id] = @workorder.client_id, flash[:contact_id] = @workorder.contact_id, flash[:location_id] = @workorder.location_id, flash[:type_id] = @workorder.type_id, flash[:woasset_id] = @workorder.woasset_id) %> 
+1

這不能工作:js是客戶端,閃存設置是服務器端 – apneadiving 2013-04-29 12:54:27

+1

它實際上工作。但是,每隔一段時間它都不會。我不確定最終用戶在失敗時做了什麼。我試圖確定在失敗時採取的行動。 – Reddirt 2013-04-29 20:30:30

回答

3

你可以嘗試參數傳遞到鏈接的路徑,然後通過你的控制器的動作把它傳遞到窗體:

鏈接:

<%= link_to 'New Work Order', new_workorder_path(request_id: @request.id), :class => 'btn btn-primary' %> 

控制器

def new 
    @request_id = params[:request_id] 
    ... 
end 

在您的視圖中:

<%= f.hidden_field :request_id, value: @request_id %> 
+0

參數會比flash更好嗎?他們不相似嗎?我使用閃光燈,因爲它在下一頁後返回到零。 – Reddirt 2013-05-01 20:16:13

+0

@Reddirt這個解決方案似乎是最乾淨的,即使你不需要使用類變量'@ request_id',你可以直接在視圖中使用'params [:request_id]'。 – MrYoshiji 2013-05-01 20:29:35

+0

grotori和MrYoshiji - 謝謝你! – Reddirt 2013-05-01 21:11:27