2013-03-14 15 views
10

フォームをrfid部分からview/cabinet/showページにナビゲートすると、値を取得するにはどうすればよいですか? device has_one rfid。キャビネット/ショーからRails/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のいずれかが渡された場合、メソッドの仕事を作成したい:

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 

エンド

新しいdevice/_formのcabinet_idとrfid部分:

<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

+0

いいえ、一度に1ステップずつ取ります。うまくいけば、私がrfidを見つけたら、私は自分でキャビネットを得るでしょう。 –

+0

私は、両方のフィールドにあらかじめ入力する必要のあるコードについて回答しました。それが動作するか教えていただけますか? – zeantsoi

答えて

10

お持ちの場合:あなたのparamsキーはあなたのlink_toタグにハッシュに渡された値と一致する必要があります

<%= 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_to "Create New Device (non-functional)", new_device_path({:id => @rfid.id, :cabinet_id => @cabinet.id}), :class => "btn btn-primary" %> 

は、使用してrfidcabinet_idフィールドを事前に移入得ることができます。

+0

驚くばかり!私はちょっと手を加えなければなりませんでしたが、あなたは間違いなく私を正しい道に導いてくれました。 –

+2

'_form.rb'も' edit'アクションで使用されていますが、これらの値を編集するのは壊れています。 – aidan

+0

@aidan、あなたは冗談を言っています。あなたの '_form.rb'値が影響を受けている場合、それらの値は正しくマッピングされていません。また、あなたが経験している問題の周りの文脈を提供することは、特に3歳の答えに従うことに役立ちます。どのバージョンのRailsを使用していますか?この質問に答えられて以来、バージョンは数回バンプされています。 – zeantsoi

4

@ zeantsoiさんの回答が掲載されているようですが、編集機能が壊れています。修正したように、私は以下の軽微な変更を提案:params[:cabinet_id]が存在しない場合は、

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

この方法は、@device.cabinet_id(既存の値)が持続します。

関連する問題