rails通过关联搜索

时间:2015-06-16 00:30:53

标签: ruby-on-rails

在我的rails应用程序中,我希望能够从导航栏中搜索客户端,并让它自动为WorkOrderController提供相关的客户端。目标是在用户进入新视图之前自动生成一些工作订单信息。我希望通过将新的工作订单路径嵌套在客户端下来实现这一点,但我不知道在何处将表单提交转换为查找以返回客户端以在工作订单控制器中使用。很显然,我在某个地方错过了一种方法,但我不确定在哪里放置它,我究竟需要它做什么。

据我所知,我需要做的是以某种方式将表单提交给某个方法,然后将其重定向到新的工作订单页面,其中包含:params中的client_id。

我完全不在这里,还是我错过了相对较小的东西?一个半小时的搜索并没有像大多数指南谈论form_for功能那样出现。这对搜索来说似乎并不完整。

#routes.rb
....
resources :client do
  get 'schedule', to: 'work_order#client_schedule'
  get 'archive', to: 'work_order#client_archive'
  resources :work_order, only: [:new]
end     
.....

#application.html.erb
.....
<form class="navbar-form navbar-left" role="search">
  <div class="form-group">
    <input type="text" class="form-control" placeholder="Enter client number">
   </div>
   <button type="sumbit" class="btn btn-default">New Work Order</button>
</form>
.....

#WorkOrderController.rb
 ....
def new
  client = Client.find(params[:client_id])
  @workorder = WorkOrder.new(client: client)
end
....

编辑:

我进行了以下更改,现在当我尝试加载页面时,我收到一条错误消息,说我错过了client_id参数,尽管我认为这是我首先要查找的内容

<%= form_tag new_client_work_order_path, :method => "get", class: "navbar-form navbar-left" do %>
  <div class="form-group">
    <%= text_field_tag :search, params[:search],  class: "form-control", placeholder: "Enter client number"%>
   </div>
   <button type="sumbit" class="btn btn-default">New Work Order</button>
<% end %>

编辑2: 通过以下方式能够达到我想要的结果:

在work_order_controller.rb

....
def new
  client = Client.find_by(clientnumber: params[:client_number])
  @workorder = WorkOrder.new(client: client)
end
....

我切换了路由,以便新路由没有嵌套在客户端下,然后将表单更改为:

<%= form_tag new_work_order_path, :method => "get", class: "navbar-form navbar-left" do %>
  <div class="form-group">
    <%= text_field_tag :client_number, params[:client_number],  class: "form-control", placeholder: "Enter client number"%>
  </div>
  <button type="sumbit" class="btn btn-default">New Work Order</button>
<% end %>

我觉得我已经创造了一些我还没看到的其他问题,但我可能只是偏执狂

1 个答案:

答案 0 :(得分:0)

快速扫描你的代码,我没有看到任何遗漏,虽然有很多方法可以完成,但我认为你正处于(a)正确的轨道。

在Rails中构建这样的东西涉及让很多组件同时一起工作,因此在这种情况下,我将依次关注每个步骤(按时间顺序)以验证它是否按预期工作。特别是我:

  • 单击“新工作单”按钮以查看控制器“看到”client_id参数时,观察Rails控制台。 (仔细观察,根据你的HTML,我不知道这个表单将如何传递这个参数......或者表格首先如何提交。表单的action属性在哪里?)
  • 使用控制器puts操作中的#new语句验证client对象是否已正确初始化,@workorder.client_id是预期值。
  • 将输出添加到打印出#new的{​​{1}}视图模板,以验证该ID是否已转移到视图。我在上面的代码片段中没有看到此视图模板,因此我不知道您期望显示的内容。

等等。将问题分解为更小的步骤,以便更容易弄清楚发生了什么。祝你好运!