我有三个脚手架:国家,州和地区。
我的路线:
NetworkManager::Application.routes.draw do
root to: "countries#index"
resources :countries
resources :states
resources :districts
end
来自各个国家/地区。当我从州回国时,我希望它带我到母国。与州相同< - >区。
我知道如何使用country_path(@state.country_id)
从州插入国家/地区链接
我无法自动将正确的国家/地区和状态插入州和地区form_for。我不希望用户每次都必须选择国家/地区和州,因为他们从国家/地区视图创建新状态,并且他们从州视图创建新区域。
那么,如何将Country和State id传递给form_for?
答案 0 :(得分:0)
假设你的路线设置得恰当:
resources :countries do
resources :states
end
resources :states do
resources :districts
end
(我知道它们来自您之前的问题)
form_for [@country, @state]
转换为country_and_state_path(@ country,@ state)。
数组取决于您的嵌套。如果你按照建议做了两个深度,你可以保持这种模式:
form_for [@state, @district]
等。如果没有,那么就像:
form_for [@country, @state, @district]
也会奏效。那就是那里的模式 - 取决于你的路线。
希望有所帮助!
答案 1 :(得分:0)
目前我已经解决了这个问题。虽然,不是我喜欢的方式:
我将通过描述如何将一个区域添加到一个州来解释这一点,因为那是一个更复杂的区域。
状态 - show.html.erb(仅限新路径代码)将GET参数设置为状态的id和country_id,最好我想以其他方式发送这些参数,但我需要发送它们。
<td colspan=4>
<%=
link_to 'New District',
new_district_path(
:country_id => @state.country_id,
:state_id => @state.id
)
%>
</td>
区 - new.html.erb(将country_id和state_id设置为实例值或传递的参数...我想使用POST来发送这些参数)
<h1>New district</h1>
<%
@district.country_id = @district.country_id || params[:country_id] || ""
@district.state_id = @district.state_id || params[:state_id] || ""
%>
<%= render 'form' %>
<%= link_to 'Back', state_path(params[:state_id]) %>
区 - _form.html.erb
<%= form_for(@district) do |f| %>
<% if @district.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@district.errors.count, "error") %> prohibited this district from being saved:</h2>
<ul>
<% @district.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name %><br>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :country_id %><br>
<%= f.number_field :country_id %>
</div>
<div class="field">
<%= f.label :state_id %><br>
<%= f.number_field :state_id %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>