繁体   English   中英

使用控制器构建视图,但在Rails中没有模型

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM