簡體   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