Rails onclick => 2项

时间:2012-12-17 16:51:49

标签: ruby-on-rails

以下内容适用于将数据从一个页面传送到另一个页面:

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

我如何添加第二个字段?以下不起作用:

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

1 个答案:

答案 0 :(得分:2)

onclick并不是真的以这种方式工作 - 它是一个html属性,用于存储在单击元素时要执行的JavaScript代码。虽然你可以使用它在Ruby方法调用的上下文中评估Ruby代码(在这种情况下作为给予link_to的选项哈希的一部分),但它确实没有意义这样做。

在你的第一个例子中,它实际上并没有做任何事情。如果您在显示该链接的页面上检查渲染的html,我希望它的评估结果为<a href="..." onclick="6">New Work Order</a>。但是,您可以将数据存储在session中(只要用户保持登录状态,这是持久的),这就是您在页面之间看到这些数据的原因。

如果您尝试填写新工单的默认值,可以将它们作为参数传递给路径方法:

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

但是,这可能不是最好的方法。如果始终存在与工作订单关联的客户或服务,您可能需要查看nested routes