Я новичок в рельсах и в написании своего первого приложения. Просто не могу понять, как настроить таргетинг на пользователя, избранного current_user (три модели: User, Tool, FavoriteUser).
Контроллер (Инструменты)
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'=
РЕДАКТИРОВАТЬ:
База данных FavoriteUser:
user_id:integer #favorited
c_user_id:integer #active user
Просто не могу понять.
Заранее спасибо за помощь!
ДОБАВЛЕННЫЕ ОТНОШЕНИЯ:
< EM> 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
избранное_user.rb
class FavoriteUser < ActiveRecord::Base
belongs_to :c_user, class_name: "User"
belongs_to :user, class_name: "User"
end
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
params[:c_user_id]
Равен нулю при вызове этого действия контроллера. Вы должны отправить его, если хотите получить к нему доступ. Если вы поместите эту строку в начало действия вашего контроллера
puts "#{params[:c_user_id]}"
Вы увидите, что params [: c_user_id] равен нулю.
Похожие вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.