2013-08-14 1 views
0

У меня есть приложение рельсы с 3 модели что-то вроде:formtastic вложенная форма создания неверного пути к действию

has_many_through

Я пытаюсь создать форму для редактирования таблицы объединения (например, изменить appointment_date. в примере модели):

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 

Но вместо :organization_id, formtastic ставит в organization_membership_id. Я подозреваю, что моя проблема находится в верхней строке <%= semantic_form_for [:active_admin, :organization, @organization_membership].

EDIT: Я сумел получить это «работает» путем расширения метода update() со следующим уродливым хака:

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

Все еще ищете для реального решения этой проблемы.

+0

Возможно ли, что два имеют одинаковое значение? Вы это подтвердили? – vee

+0

Они этого не делают. Страница редактирования находится в '/ active_admin/organization/2/organization_memberships/8/edit'. Я даже проверил 'params [: organization_id]', и он установлен в 2. – user341493

ответ

0

Вы правильно, проблема здесь заключается в следующей строкой

"<% = semantic_form_for [: active_admin,: организация, @organization_membership]"

Для вложенных ресурсов, вы будете необходимо явно передать объект организации. Например:

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

, а затем в представлении, вам необходимо сделать небольшую коррекцию:

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

Вы должны пройти организацию как ресурс, а не как символ. Вы можете найти больше об этом в форматных документах. (Посмотрите на вложенные ресурсы в разделе использования.)