0

Ich bin ziemlich neu zu Schienen und in die Programmierung meiner ersten App. Kann einfach nicht herausfinden, wie man einen Benutzer den current_user favorisiert (Drei Modelle: User, Tool, FavouriteUser).Rails 4 Fehler: ActiveRecord :: RecordNotFound Konnte 'id' nicht finden =

Controller (Werkzeuge)

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 

-Übersicht (Tools)

%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 

Wenn ich dies in meinem Browser ausgeführt es erscheint folgende Fehlermeldung:

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

EDIT:

FavoriteUser Datenbank:

user_id:integer #favorited 
c_user_id:integer #active user 

Ich kann es einfach nicht herausfinden.

Vielen Dank im Voraus für Ihre Hilfe!

ADDED RELATIONSHIPS:

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

Es sagt, 'params [: c_user_id]' ist 'nil' in Ihrer Controller-Aktion. Können Sie 'params' aus den Logs kopieren und einfügen, die zu Ihrer Aktion kommen? – RAJ

+0

@RAJ Wie kann es Nil sein? Diese Parameter wurden zur Frage – Gugubaight

+1

hinzugefügt. Ich gehe davon aus, dass Sie in Ihrem Browser die URL '/ tools' anklicken, in der' c_user_id' param nicht vorhanden ist. Deshalb ist 'params [: c_user_id]' null. Können Sie Params aus Protokollen einfügen? Bestätigen Sie auch, welche URL Sie treffen. – RAJ

Antwort

-1

, dass die Lösung ist!

@userfavorites = current_user.userfavorites 
0
params[:c_user_id] 

nil wenn diese Controller-Aktion aufgerufen wird. Sie müssen es senden, wenn Sie darauf zugreifen möchten. Wenn Sie diese Zeile an der Oberseite des Controllers Aktion setzen

puts "#{params[:c_user_id]}" 

Sie werden sehen, params [: c_user_id] ist gleich Null.

+0

Wie um alles in der Welt kann ich das? In dem Modell? Ich habe dies in dem User-Modell getan: 'has_many: favorite_users # nur die 'Beziehungen' # Lieblings Benutzer Benutzer has_many: favorite_relationships, class_name: "FavoriteUser", foreign_key: "c_user_id" has_many: userfavorites, durch: favorite_relationships, Quelle: Benutzer # Favoritad von einem Benutzer has_many: favorited_relationships, class_name: "FavoriteUser", foreign_key: "user_id" has_many: userfavorited_by durch: favorited_relationships, Quelle: c_user' – Gugubaight

2

Wenn Sie Ihre Beziehungen richtig eingerichtet haben, sollte folgende Lösung für Sie arbeiten.

ersetzen:

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

mit

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

Die Beziehungen arbeiten (in der Konsole getestet), aber für mich scheint es, dass Sie nicht tun können, was Sie getan haben. Ich bekomme einen undefinierten Methodenfehler – Gugubaight

+0

Ich werde die Beziehungen der Frage wirklich schnell hinzufügen – Gugubaight

Verwandte Themen