2016-02-14 7 views
0

в моих рельсах 4 приложения, у меня есть user модели, has_oneprofile модели, которая также belongs_touser моделиRails 4 build_association

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

в моем routes.rb

resources :users do 
    resources :profiles 
end 

профили просмотра, new.html.erb

<%= form_for(@profile,url:{ :controller => 'profiles', :action => 'create'},html: {class: "ui large segment form error"}) do |f| %> 
    <%= render 'shared/form_error_messages', object: f.object%> 
     <div class="ui horizontal divider">Create a Profile</div> 
      <%= f.text_field :first_name, :placeholder => "First Name" , :required => true%> 
<%= f.submit "Submit Profile", class: "ui submit button"%> 
    <% end %> 

profiles_controller.rb

def new 
    @user = User.find(params[:user_id]) 
    @profile = @user.build_profile 
end 

def create 
    @profile = @user.build_profile(profile_params) 
    if @profile.save 
     flash[:success] = "Profile has been created" 
     redirect_to root_url 
    else 
     render 'new' 
    end 
end 

private 
def profile_params 
    params.require(:profile).permit(:first_name) 
end 

, когда им заполнив форму, им получать

NoMethodError in ProfilesController#create 
undefined method `build_profile' for nil:NilClass 

Application Trace | Framework Trace | Full Trace 
app/controllers/profiles_controller.rb:9:in `create' 
Request 
Parameters: 
{"utf8"=>"✓", 
"authenticity_token"=>"MFCANYra..", 
"profile"=>{"first_name"=>"sample", 
"commit"=>"Submit Profile", 
"user_id"=>"1"} 

ответ

0

Попробуйте изменить действие создать в profiles_controller.rb, как показано ниже: -

def create 
    @user = User.find(params[:profile][:user_id]) 
    @profile = @user.build_profile(profile_params) 
    if @profile.save 
     flash[:success] = "Profile has been created" 
     redirect_to root_url 
    else 
     render 'new' 
    end 
end 

дайте мне знать, что это работает или нет, попытайтесь найти, если что-то еще вызывает проблему, спасибо.

+0

Я уже сделал это, и да, он работает, хотя он не хранит user_id, я могу сделать это вручную, поместив его в форму, но было бы очень приятно, если бы кто-то исправит неправильную часть, используя build_association, чтобы она автоматически помещает в user_id – Remson

+0

спасибо! он сначала не работал из-за небольшого промаха, я удалял [: profile] на params, так как [: user_id] не является массивом профиля, после чего он работал. Еще раз спасибо, плохо отредактируйте это и отметьте это как check – Remson

+0

отлично, я сработал :-) – sghosh968