【问题标题】:formtastic nested form creating wrong path for actionformtastic 嵌套表单创建错误的操作路径
【发布时间】:2013-08-14 16:51:25
【问题描述】:

我有一个带有 3 个模型的 rails 应用程序,例如:

我正在尝试创建一个表单来编辑连接表(例如,更改示例模型中的约会日期):

1 <%= semantic_form_for [:active_admin, :organization, @organization_membership] do |f| %>
2   <%= f.inputs "Organization" do %>
3     <h2><%= @organization_membership.organization.name %></h2>
4     <% @organization_membership.organization.organization_memberships.each do |organization_member| %>
5       <%= organization_member.user.name %></br>
6     <% end %>
7   <% end %>
8   <%= f.inputs "New Member" do %>
9     <span id="new-member"></span>
10     <% if !resource.user.nil? %>
11       <h3><%= resource.user.login %></h3>
12     <% end %>
13     <%= f.input :user_id, :as => :hidden, :input_html => { :id => 'user-id' } %>
14     <%= f.input :organization_id, :as => :hidden, :value => @organization_membership.organization.id %>
15     <%= f.input :start_date, :as => :date_picker %>
16     <%= f.input :end_date,   :as => :date_picker %>
17   <% end %>
18   <%= f.actions %>
19 <% end %>

问题在于这会渲染一个带有以下 html 的页面:

<form accept-charset="UTF-8"
      action        ="/active_admin/organizations/8/organization_memberships/8"
      class         ="formtastic organization_membership"
      id            ="edit_organization_membership_8"
      method        ="post"
      novalidate    ="novalidate">

问题是action。它应该是这样的:

/active_admin/organizations/:organization_id/organization_membership/organization_membership_id

但是,formtastic 输入的是organization_membership_id,而不是:organization_id。我怀疑我的问题出在顶行&lt;%= semantic_form_for [:active_admin, :organization, @organization_membership]

编辑:我已经设法通过使用以下丑陋的 hack 扩展 update() 方法来实现这个“工作”:

def update
    params[:organization_id] = params[:organization_membership][:organization_id]                                                                            
    super
end

仍在寻找这个问题的真正解决方案。

【问题讨论】:

  • 这两个值可能相同吗?你验证了吗?
  • 他们没有。编辑页面位于/active_admin/organizations/2/organization_memberships/8/edit。我什至检查了params[:organization_id],它设置为 2。

标签: ruby-on-rails nested-attributes formtastic


【解决方案1】:

你是对的,这里的问题在于下面这行

对于嵌套资源,您需要显式传递一个组织对象。例如:

def edit
    @organization = Organization.find(id)
end

然后在视图中,需要稍作修正:

<%= semantic_form_for [:active_admin, @organization , @organization_membership] do |f| %>

您必须将组织作为资源而不是符号传递。 您可以在 formtastic 文档中找到有关它的更多信息。(在使用部分下查找嵌套资源。)

【讨论】:

    猜你喜欢
    • 2012-06-05
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 2020-03-21
    相关资源
    最近更新 更多