2016-04-23 2 views
0

Я использую разработать для регистрации и пытаюсь гнездо формы для знака вверх и только этот раздел не отображается в видеУплотненный Форма не отображается

модель пользователя

class User < ActiveRecord::Base 
    has_many :languages_users 
    has_many :languages, :through => :languages_users 
    accepts_nested_attributes_for :languages_users 
end 

registrations_controller .RB

class Users::RegistrationsController < Devise::RegistrationsController 

before_filter :configure_sign_up_params, only: [:create] 
def new 
    build_resource({}) 
    resource.languages_users.build 
    respond_with self.resource 
end 

def create 
super 
end 
protected 

    def configure_permitted_parameters 

    devise_parameter_sanitizer.for(:sign_up) { |u| 
     u.permit(:email, :password, :password_confirmation, :bio, :location, :last_name, :first_name, :nationality, :avatar, languages_users_attributes: [:language_id, :level]) } 
    end 
end 

соответствующую часть формы sign_up

<%= form_for(resource, as: resource_name, url: "users/registration_path(resource_name)") do |f| %> 
<%= f.fields_for :languages_users do |lu| %> 
    <br> 
     <div class="fields"> 
     <%= lu.collection_select(:language_id, Language.order('language ASC').all, :id, :language) %><br> 
     <%= lu.hidden_field :level, value: 1 %> 
     </div> 
    <% end %> 
<% end %> 

соответствующие маршруты

Rails.application.routes.draw do 
    resources :languages 
    resources :languages_users 
    devise_for :users 
end 

любое понимание будет оценен по достоинству!

ответ

0

должен работать как есть, вы уверены, что вы не:

  • перезагрузить свой resource экземпляр между методом действия registration#new контроллера и видом
  • вызывающим resource.languages где-то, что будет инициировать запрос SQL на ваш посредник language_users отношения и промойте его

Rails также можно спутать, потому что ваши таблицу шаблоны имени languages_users посвящено определить ин termediary таблица в has_and_belongs_to_many связи, попробуйте переименовать модель или использовать этот последний тип отношения, если она лучше соответствует вашим потребностям

+0

Привет, что вы имеете в виду, перезагружая ресурс между регистрирующим # новый контроллер и вид? Я ничего не изменил при разработке, кроме того, что я поставил выше - я пропустил еще один шаг? Кроме того, languages_users - это таблица соединений между языком и моделью пользователя, таким образом, имя. – gwalshington

+0

1) в вашем шаблоне просмотра макета может быть 2) если у вас нет логики в вашей модели language_user, вы можете использовать связь has_and_belong_to_many между пользователем и языком, если вы намереваетесь добавить в эту модель еще несколько вещей (например, уровень владения языком), я бы переименовал его. – nicolas

+0

Я поставил вид выше, так что я так не думаю. – gwalshington

-1
<%= form_for(resource, as: resource_name, url: "users/registration_path(resource_name)") do |f| %> 
<% resource.languages_users.each do |languages_user| %> 
    <%= f.fields_for languages_user do |lu| %> 
    <br> 
     <div class="fields"> 
     <%= lu.collection_select(:language_id, Language.order('language ASC').all, :id, :language) %><br> 
     <%= lu.hidden_field :level, value: 1 %> 
     </div> 
    <% end %> 
    <% end %> 
<% end %> 
+0

Я получаю параметр Unpermitted: languages_user, когда я делаю это обновление. Я также замечаю, что если есть ошибки в форме регистрации при отправке, вложенная форма исчезает – gwalshington

Смежные вопросы