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 = current_user.favorite_user # problematic! 
    @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 

私は私のブラウザでこれを実行する場合は、次のエラー表示されます。

NoMethodError in ToolsController#index 
undefined method `favorite_user' for #<User:0x39df638> 

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 

ROUTES

Rails.application.routes.draw do 
    devise_for :users 

    get 'welcome/index' 
    resources :tools do 
    member do 
     get "like", to: "tools#upvote" 
     get "dislike", to: "tools#downvote" 
    end 
    get :favorite, on: :member 
    end 

    resources :users, only: [:index, :show] do 
    get :userfavorite, on: :member 
    end 

    authenticated :user do 
    root 'tools#index', as: "authenticated_root" 
    end 

    root 'welcome#index' 

    get '/search' => 'tools#search' 

    get '/users' => 'users#index' 
end 
+0

「user」と「@ user」という同じ名前の2つの変数を持つことは非常に混乱しています。私はそれを避けようとします、それは多くの頭痛を避けるでしょう。 – Bustikiller

+0

ところで、あなたは本当に '@ userfavorite_user_path'を書くのではなく、' userfavorite_user_path'と書いてみたいと思います – Bustikiller

+0

あなたは正しいです!私はちょうどそれを表示するために@ユーザーに集中しました - ありがとう! – Gugubaight

答えて

0

これは解決策です!

@userfavorites = current_user.userfavorites 
1

変更この:

@user = current_user.favorite_user 

へ:

@favorite_users = current_user.favorite_users 

userにhas_many favorite_users

@userが呼び出された場所インスタンス変数の名前を変更することを忘れないでください。

+0

これは動作します(少なくともコントローラーで//エラーは発生しません)。しかし、私はこのソリューションでユーザー名のような属性を選択することはできません – Gugubaight

+0

それはコレクションです、あなたはそれを考える必要があります – neo

+0

それは私がやっていることですが、私はまた、そのループ内のユーザーアイテムの特定の属性にアクセスしたいusername @) – Gugubaight

関連する問題