2016-09-06 18 views
0

私はかなりレールが新しく、最初のアプリケーションをコーディングしています。 current_userが好きなユーザーをターゲットにする方法(3つのモデル:User、Tool、FavoriteUser)を理解することはできません。私は私のブラウザでこれを実行する場合Rails 4 Error:ActiveRecord :: RecordNotFound 'id'が見つかりませんでした=

コントローラ(ツール)

def index 
    @favorites = current_user.favorites.order("created_at DESC") 
    @userfavorites = current_user.userfavorites.order("created_at DESC") 
    @tools = Tool.where(user_id: current_user).order("created_at DESC") 
    @user = FavoriteUser.find(params[:c_user_id]).user_id 
    @cuser = current_user 
end 

インデックス表示(ツール)

%h2 My Favorite Users 
- @userfavorites.each do |user| 
    = image_tag gravatar_for @user if @user.use_gravatar == true 
    = image_tag @user.avatar_filename.url if @user.use_gravatar == false 
    %h2= link_to @user.username, @user 
    %p= link_to "Favorite", @userfavorite_user_path(user, type: "favorite"), method: :get 
    %p= link_to "Unfavorite", @userfavorite_user_path(user, type: "unfavorite"), method: :get 

それは次のように表示されるエラー:

ActiveRecord::RecordNotFound in ToolsController#index 
Couldn't find FavoriteUser with 'id'= 

EDIT:

FavoriteUserデータベース:

user_id:integer #favorited 
c_user_id:integer #active user 

私は単にそれを把握することはできません。

ご協力いただきありがとうございます!

加え関係:

user.rb

has_many :favorite_users # just the 'relationships' 
    # Favorite users of user 
    has_many :favorite_relationships, class_name: "FavoriteUser", foreign_key: "c_user_id" 
    has_many :userfavorites, through: :favorite_relationships, source: :user 

    # Favorited by a user 
    has_many :favorited_relationships, class_name: "FavoriteUser", foreign_key: "user_id" 
    has_many :userfavorited_by, through: :favorited_relationships, source: :c_user 

favorite_user.rb

class FavoriteUser < ActiveRecord::Base 
    belongs_to :c_user, class_name: "User" 
    belongs_to :user, class_name: "User" 
end 
+0

これは、 'params [:c_user_id]'はコントローラのアクションでは 'nil'と言います。あなたのアクションに来ているログから 'params'をコピーアンドペーストできますか? – RAJ

+0

@RAJどうしたらいいですか?これらのパラメータを質問に追加しました – Gugubaight

+1

あなたのブラウザに '/ tools'というURLがあり、' c_user_id'のparamが存在しないので、 'params [:c_user_id]'がnilであると仮定します。ログからパラメータを貼り付けることはできますか?また、あなたが当てているURLを確認してください。 – RAJ

答えて

0
params[:c_user_id] 

がnilこのコントローラアクションが呼び出されたとき。あなたがそれにアクセスしたい場合は、それを送信する必要があります。あなたのコントローラのアクション

puts "#{params[:c_user_id]}" 

の先頭に次の行を置く場合は、のparamsが表示されます[:c_user_id] nilです。

+0

どのように私はそれを行うことができますか?モデルでは?私はこれをUserモデルで行っています: 'has_many:favorite_users#関係だけ ' #好きなユーザーのユーザー has_many:favorite_relationships、class_name:" FavoriteUser "、foreign_key:" c_user_id " has_many:userfavorites、through: favorite_relationships、ソース:ユーザーによるユーザー #1 Favoritad にhas_many:favorited_relationships、CLASS_NAME: "FavoriteUser"、FOREIGN_KEY: "USER_ID" にhas_many:userfavorited_by、経由:favorited_relationships、ソース: – Gugubaight

2

あなたの関係を正しく設定していれば、解決策はあなたのために働くはずです。

は交換してください:

@user = FavoriteUser.find(params[:c_user_id]).user_id 

ソリューションです

# Returning complete user object instead of only user's id, 
# as it's getting used on the view 
@user = current_user.favorite_user 
+0

c_user'関係が作業しています(コンソールでテストされていますが、私にはあなたがしたことはできません。定義されていないメソッドエラーが発生する – Gugubaight

+0

質問に関係を本当に素早く追加します – Gugubaight

関連する問題