13

ページ の一部deviceから新しいフォームに移動するときに、新しいフォームに事前入力する値を取得するにはどうすればよいですか?has_one 。rfidview/cabinet/showdevicerfid

キャビネット/ショーからのリンク:

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

devices_controller0または2つのパラメータが渡されたときに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

終わり

newの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>

ありがとうございました。

4

2 に答える 2

13

あなたが持っている場合:

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

rfid次のコマンドを使用して、cabinet_idフィールドに事前入力することができます。

<%= 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] %>

link_toparamsキーは、タグのハッシュに渡された値と一致する必要があることに注意してください。

于 2013-03-14T15:58:02.310 に答える
5

投稿された@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(既存の値)は存続します。

于 2016-09-02T23:17:05.833 に答える