[英]Building a view with a controller but no model in rails
我可能正在解決這個錯誤,但是我有一個名為Location
的模型,location是一個名稱... group_id
(來自模型Group
)和address_id
(來自Address
模型)。 流程為:
用戶選擇要添加位置的組。 用戶可以在其中添加位置的頁面,先前已選擇的組,位置名稱的輸入框和可用地址列表,以及添加新地址的功能(可將您帶到其他頁面)通過對應於Address
模型的控制器的新動作)。 我也必須為其他模型做其他類似的事情。 因此弄清楚這一點會很有幫助。 使我絆倒的部分是:
我確信我能弄清楚如何使地址選擇框起作用,並且我將擁有組,這樣我將具有組ID和地址ID,然后僅使用輸入的名稱創建GroupLocation。
問題是,當要添加一個新地址時,由於表單存在於另一個頁面中(如上所述),提交地址后,控制器如何知道除創建地址外,創建的地址最終還是會用於新位置的選定組。
您可以將group_id
作為預填充的隱藏表單字段傳遞。 提交表單后,在控制器中提取該隱藏字段值,並在創建地址后將其作為查詢參數通過重定向傳遞給下一個控制器(位置控制器)。
addresses_controller.rb
class AddressesController < ApplicationController
def new
@address = Address.new
@group_id = params[:group_id] # This should be provided either as a route parameter or a query parameter.
end
def create
@address = Address.create! permitted_address_params
# the group_id parameter is obtained from hidden field of form
# which will be passed to the locations controller as a query
# parameter along with the id of newly created address.
redirect_to new_location_path(address_id: @address.id, group_id: params[:group_id])
end
private
def permitted_address_params
params.require(:address).permit(...fields from address ...)
end
end
locations_controller.rb
class LocationsController < ApplicationController
def new
@location = Location.new(address_id: params[:address_id], group_id: params[:group_id])
end
def create
@location = Location.create! permitted_location_params
end
private
def permitted_location_params
params.require(:location).permit(:group_id, :address_id, ...other location params ....)
end
end
地址/new.html.erb
<%= form_for @address do |f| %>
<%= hidden_field_tag :group_id, @group_id %>
... other address fields ...
<% end %>
location / new.html.erb
<%= form_for @location do |f| %>
<%# This ensures that group_id and address_id are passed to the create action of locations controller %>
<%= f.hidden_field :group_id %>
<%= f.hidden_field :address_id %>
... other location fields ...
<% end %>
我希望這可以為您指明正確的方向。 如果您仍有疑問,請在評論中提出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.