在我的Rails應用程序中,我希望能夠從導航欄中搜索客戶端,並讓它自動向WorkOrderController提供關聯的客戶端。目標是在用戶進入新視圖之前自動生成一些工作訂單信息。我希望通過將新的工作訂單路徑嵌套在客戶端中來實現這一點,但我不確定將表單提交轉換爲查找以返回客戶端以供在工作訂單控制器中使用。很明顯,我錯過了一個方法,但我不知道該把它放在哪裏以及我需要它做什麼。rails通過關聯搜索初始化新對象
據我所知,我需要做的是以某種方式將表單提交給某個方法,然後通過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 %>
,我感到我已經創建了一些其他的問題,我不印象但我可能只是偏執
這是兩個模型之間的關係嗎? –
客戶的has_many工作訂單 工單belongs_to的客戶 –
以及如果他們應該做這樣的事情在您的工作單控制器創建一個新的工作單'@workorder = @ client.workorders.build'如果我認爲你是在一個路由相關然後例如'localhost:3000/clients/1/workorders/new',那麼它應該工作,因爲'@ client'變量應該作爲參數 –