2013-03-14 54 views
10

如何獲取值以便在從rfid部分view/cabinet/show頁面導航時預填充新的device表單? device has_one rfidRails/Ruby - 從其他頁面傳遞的數據預填充表格

從櫃/顯示鏈接:

<%= link_to "Create New Device (non-functional)", new_device_path({:id => @rfid.id, cabinet_id: @cabinet.id}), :class => "btn btn-primary" %> 

devices_controller,我想有當0或2 PARAMS傳遞create方法工作:

def create(options) 

if options[:cabinet_id] and options[:id] 
    @rfid = Rfid.find(params[:id]) 
    @device = Device.new(params[:device]) 
    @device.rfid = @rfid 
    @device.cabinet_id = :cabinet_id 

else 
    @device = Device.new(params[:device]) 
    @cabinet = Cabinet.find(params[:device][:cabinet_id]) 
    @device.row_id = @cabinet.row_id 
end 
    respond_to do |format| 
    if @device.save and @cabinet.refresh_capacity_used and @cabinet.refresh_consumption 
     format.html { redirect_to @device, notice: 'Device was successfully created.' } 
     format.json { render json: @device, status: :created, location: @device } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @device.errors, status: :unprocessable_entity } 
    end 
    end 

新版的cabinet_id和rfid部分device/_form

<tr> 
     <th>Cabinet</th> 
     <td><%= f.select :cabinet_id, options_from_collection_for_select(Cabinet.order(:name).all, "id", "name", @device.cabinet_id) %></td> 
</tr> 


<tr> 
     <th>RFID</th> 
     <td><%= f.text_field :rfid, :value => params[:rfid]%></td> 
</tr> 

謝謝。

+0

你只是試圖讓RFID字段預填充? – zeantsoi 2013-03-14 15:38:59

+0

不,一次只採取一步。希望如果我找出rfid,我會自己拿到內閣。 – 2013-03-14 15:48:12

+0

我已經回答了應該預填充這兩個字段的代碼。你能告訴我它是否有效嗎? – zeantsoi 2013-03-14 17:00:15

回答

10

如果您有:

<%= f.select :cabinet_id, options_from_collection_for_select(Cabinet.order(:name).all, "id", "name", params[:cabinet_id]) %> 

<%= f.text_field :rfid, :value => params[:id] %> 

請注意,您的params鍵必須在link_to標籤傳遞到哈希值相匹配:

<%= link_to "Create New Device (non-functional)", new_device_path({:id => @rfid.id, :cabinet_id => @cabinet.id}), :class => "btn btn-primary" %> 

您可以使用獲得預填充rfidcabinet_id領域。

+0

太棒了!我不得不小心翼翼地撥弄一下,但你肯定讓我走上了正確的道路。 – 2013-03-14 17:14:00

+2

除'_form.rb'也被'edit'動作所使用,現在編輯這些值已被破壞。 – aidan 2016-03-09 03:52:33

+0

@aidan,你一定是在開玩笑吧;如果你的'_form.rb'值受到影響,你就會錯誤地映射它們。此外,圍繞您遇到的問題提供一些背景會有所幫助,尤其是在追蹤三年前的答案時。你甚至使用什麼版本的Rails?自從這個問題得到解答後,這個版本已經被碰撞了好幾次。 – zeantsoi 2016-03-09 05:56:26

4

@ zeantsoi的回答大多是作品,但它打破了編輯功能。作爲一個解決方法,我提出以下小修改:

<%= f.select :cabinet_id, options_from_collection_for_select(Cabinet.order(:name).all, "id", "name", params[:cabinet_id] || @device.cabinet_id) %> 

<%= f.text_field :rfid, :value => params[:rfid] || @device.rfid %> 

這樣,如果params[:cabinet_id]不存在,@device.cabinet_id(現有值)將持續​​存在。