[英]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.