2013-11-04 60 views
0

我試圖解決這個長期存在的問題(見我最後的問題)未定義的方法「MODEL_NAME」爲NilClass:類以下用戶

我修改Twitter的克隆是一個所有功能於一身的網頁件事。

我希望current_user能夠通過手動提交它來遵循:username

所以下/views/users/buddies.html.erb

<%= form_for :relationship do |f| %> 
    <%= f.text_field :username, placheholder: "username" %> 
    </div> 
    <br/> 
    <%= f.submit "Add/Subtract" %> 
<% end %> 

試圖張貼到該控制器:

users_controller.rb

def buddies 
    @relationship = User.find_by_username(params[:username]) 

    if @relationship 
    if current_user.following? @relationship 
     current_user.unfollow @relationship 
    else 
     current_user.follow @relationship 
    end 
    else 
    flash[:notice] = "User with username #{params[:username]} is not found" 
    end 

我使用User.rb定義的方法。

這應該工作,但它沒有。它必須是params或語法的問題。 :relationship應該是@relationship?如果是這樣我得到這個錯誤:

undefined method "model_name" for NilClass:Class

我使用Rails 3.2。現在讓這個簡單,這裏是我的github

+0

您是否已經驗證'find_by_username'返回的東西,而不是'nil'? – Vidya

+0

我偷了會議控制器的那條線...我如何檢查零? – benjaminhallock

回答

0

我覺得你params參考必須params[:relationship][:username]

+0

對於nil:NilClass,未定義的方法'[]',你是否用圓括號等來鍵入它? – benjaminhallock

0

正如Peter提到,你應該抓住:username:relationship哈希與params[:relationship][:username]這樣的:

@relationship = User.find_by_username(params[:relationship][:username]) 

您可以在控制檯中看到什麼params哈希看起來像確定如何得到:username

然後你可以在這樣一個快速和骯髒的方式檢查結果:

puts "No relationship found" if @relationship.nil? 

只是爲了檢查自己。

然後在你的表格,你這樣做:

<%= form_for @relationship do |f| %> 
+0

爲nil:NilClass'獲得'undefined method「[]爲雙重參數的東西......我想我誤解了這裏的表格。有一個單獨的關係類,因此每個用戶都有'has_many:follower_relationships,class_name:「Relationship」,foreign_key:「followed_id」has_many:followed_relationships,class_name:「Relationship」,foreign_key:「follower_id」 – benjaminhallock

+0

等待第二個! – benjaminhallock

相關問題