0

我有三个脚手架:国家、州和地区。

我的路线:

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 视图创建了一个新区。

那么,如何将 Country 和 State id 传递给 form_for?

4

2 回答 2

0

目前我已经解决了这个问题。虽然,不是我喜欢的方式:

我将通过描述我如何将一个地区添加到一个州来解释这一点,因为那是更复杂的一个。

State - show.html.erb(仅限新路径代码)将 GET 参数设置为 state 的 id 和 country_id,最好我想以其他方式发送它们,但我需要同时发送它们。

<td colspan=4>
    <%= 
    link_to 'New District', 
    new_district_path(
        :country_id => @state.country_id, 
        :state_id => @state.id
    )
    %>
</td>

District - 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 %>
于 2013-07-01T22:43:45.733 回答
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]

也会工作。所以,这就是那里的模式——取决于你的路线。

希望有帮助!

于 2013-07-01T21:47:28.170 回答