2011-07-19 71 views
0

我試圖創建一個配置文件,但由於某種原因相關聯的形式,當我點擊提交按鈕,我得到一個NoMethodError這沒有任何意義我爲我的代碼是完全同樣作爲一個教程中,我下面......除非該教程是過時..

def create
@user = User.find(params[:user_id])
@profile = @user.profiles.create(params[:profile])
redirect_to user_path(@user)
end

NoMethodError在ProfilesController#創建

任何人都知道爲什麼,我發現了NONAME錯誤? 屬於控制器的形式低於: https://github.com/imjp/SuperModel/blob/master/app/views/users/show.html.erb


EDIT 1:固定!下面的代碼不是在http://localhost:3000/users/2顯示配置文件數據(這是輪廓#顯示),但:<%= @user.profile.first_name %>

這裏是我當前的配置#顯示
def show
@user = User.find(params[:user_id])
@profile = @user.profile.find(params[:id])
end

編輯2:我在https://github.com/imjp/SuperModel

+0

你可以嘗試使用create_profile! (用!爆炸版本)來檢查是否引發異常。可能是配置文件模型上的驗證錯誤或attr_accessible/protected集。 – kain

+0

瑙,這是行不通的。我貼我的表演動作上面。任何想法可能導致拋出了這個錯誤的操作? 'undefined method'first_name'for nil:NilClass' – imjp

+0

there is no need to to additional find to profile,just @profile = @ user.profile – kain

回答

1

爲什麼@ user.profiles更新了我的github倉庫?嘗試@ user.profile(單數)

+0

我也嘗試過,但是那個拋出這個錯誤:'未定義的方法'創建'爲零:NilClass' – imjp

+0

,因爲可能用戶has_one配置文件的構造函數不同,請嘗試@ user.create_profile(params [:profile]) – kain

+0

謝謝!我沒有得到錯誤:)我似乎無法訪問存儲的變量,但現在。檢查我編輯的版本 – imjp

1

您得到undefined method 'first_name' for nil:NilClass,因爲找不到具有該ID的用戶。你可能會發送一個錯誤的參數或其他東西。你的show動作的URL是怎樣的?

編輯:

改變你創建users_controller.rb方法本

def create 
@user = User.new(params[:user]) 
@user.build_profile 

respond_to do |format| 
    if @user.save 
    format.html { redirect_to @user, notice: 'User was successfully created.' } 
    format.json { render json: @user, status: :created, location: @user } 
    else 
    format.html { render action: "new" } 
    format.json { render json: @user.errors, status: :unprocessable_entity } 
    end 
end 
end 

你已經改變了在此之後,在應用改變你的表格/視圖/用戶/ show.html.erb到這個

<h3>Add Profile</h3> 
<%= form_for([@user, @user.profile]) do |f| %> 
<div class="field"> 
    <%= f.label :first_name %><br /> 
    <%= f.text_field :first_name %> 
</div> 
<div class="field"> 
    <%= f.label :last_name %><br /> 
    <%= f.text_field :last_name %> 
</div> 
<div class="field"> 
    <%= f.label :picture %><br /> 
    <%= f.text_field :picture %> 
</div> 
<div class="field"> 
    <%= f.radio_button(:sex, "male") %> 
    <%= f.label(:sex, "Male") %> 
    <%= f.radio_button(:sex, "female") %> 
    <%= f.label(:sex, "Female") %> 
</div> 
<div class="actions"> 
    <%= f.submit %> 
</div> 
<% end %> 

它會工作。您的用戶配置文件關聯未建立。

+0

剛粘貼它。感謝您的幫助。 – imjp

+0

沒問題,我編輯了我的帖子。 – shime

+0

仍然無法正常工作:(用戶has_one:個人資料個人資料belongs_to:用戶 – imjp

相關問題