0

以下は、あるページから別のページにデータを転送するのに最適です。

<%= link_to 'New Work Order', new_workorder_path, :class => 'btn btn-primary', :onclick =>  session[:worequest_id]  %>

2番目のフィールドを追加するにはどうすればよいですか?以下は機能しません。

          <%= link_to 'New Work Order', new_workorder_path, :class => 'btn btn-primary', :onclick =>  session[:worequest_id] = @worequest.id, [:client_id] = @worequest.client_id %>

ありがとう!

更新しました

これは、新しい作業指示書で使用しているコードです。セッションからworequest_idフィールドを取得します

       <% if session[:worequest_id] != nil %>
        <%= f.hidden_field :worequest_id, :value => session[:worequest_id] %>
4

1 に答える 1

2

onclick実際にはこのようには機能しません。これは、要素がクリックされたときに実行されるJavaScriptコードを格納するために使用されるhtml属性です。これを使用して、Rubyメソッド呼び出しのコンテキストで(この場合はに与えられたオプションハッシュの一部として)Rubyコードを評価できますがlink_to、そうすることは実際には意味がありません。

最初の例では、実際には何もしません。そのリンクが表示されているページでレンダリングされたhtmlを確認すると、のように評価されると思い<a href="..." onclick="6">New Work Order</a>ます。ただし、データをに保存することはできますsession(ユーザーがログインしている限り保持されます)。そのため、このデータはページからページへと繰り越されます。

新しい作業指示書のデフォルト値を入力しようとしている場合は、それらをparamsとしてpathメソッドに渡すことができます。

link_to 'New Work Order', 
  new_workorder_path('workorder[worequest_id]' => @worequest.id, 
                     'workorder[client_id]'    => @worequest.client_id),
  :class => 'btn btn-primary'

workorders#newアクションでは、モデルのインスタンス化に次のパラメータを含める必要があります。

def new
  @workorder = Workorder.new(params[:workorder])
end

ただし、これは続行するための最良の方法ではない場合があります。作業指示に関連付けられたクライアントまたはworequestが常に存在する場合は、ネストされたルートを調べることをお勧めします。

于 2012-12-17T17:37:07.710 に答える