Rails 4 Error: ActiveRecord::HasManyThroughSourceAssociationNotFoundError
Rails 4 Error: ActiveRecord::HasManyThroughSourceAssociationNotFoundError
嗨,
这令人沮丧。我知道这里出了什么问题,但我没有解决办法。
首先报错,点击'Favorite'时提示(/app/views/users/index.html.haml)
ActiveRecord::HasManyThroughSourceAssociationNotFoundError in UsersController#userfavorite
Could not find the source association(s) "userfavorite" or :userfavorites in model FavoriteUser. Try 'has_many :userfavorites, :through => :favorite_users, :source => <name>'. Is it one of c_user_id or user_id?
请求:参数:
{"_method"=>"get",
"authenticity_token"=>"VkZF4RtOBSXLFw8mygor24Ty/Efx5uSWxto4qRWf1szu3YwFe1/F5+7QtEXXZv9eaQEQvM5O8ELX95wmPLdZYQ==",
"type"=>"favorite", # What i am doing
"id"=>"1"} # My user id
我的目标是让Users(来自用户模型)通过favoriteuser模型来收藏其他用户(用户模型)。这里的冲突:我无法正确关联,因为我只有一个数据来自的模型。
让我快速向您展示代码! (冲突 user.rb)
app/models/favorite_user.rb
class FavoriteUser < ActiveRecord::Base
belongs_to :c_user_id
belongs_to :user_id
end
app/models/user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :tools
# Favorite tools of user
has_many :favorite_tools # just the 'relationships'
has_many :favorites, through: :favorite_tools, source: :tool # the actual tools the user favorites
# Favorite users of user
has_many :favorite_users # just the 'relationships'
has_many :userfavorites, through: :favorite_users, source: :user # conflicting! Can't link to userscontroller cause it belongs to the user model, the model we are at right now.
has_many :userfavorited_by, through: :favourite_users, source: :user # conflicting! Can't link to userscontroller cause it belongs to the user model, the model we are at right now.
mount_uploader :avatar_filename, AvatarUploader
end
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :find_user, only: [:show, :favorite]
# Add and remove favorite recipes
# for current_user
def userfavorite
type = params[:type]
if type == "favorite"
current_user.userfavorites << @user
redirect_to :back
elsif type == "unfavorite"
current_user.userfavorites.delete(@user)
redirect_to :back
else
# Type missing, nothing happens
redirect_to :back, notice: 'Nothing happened.'
end
end
def index
@users = User.all
end
def show
@tools = Tool.where(user_id: @user).order("created_at DESC")
@tool = Tool.find(1)
end
private
def find_user
@user = User.find(params[:id])
end
end
app/views/users/index.html.haml
- @users.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", favorite_user_path(user, type: "favorite"), method: :get
%p= link_to "Unfavorite", favorite_user_path(user, type: "unfavorite"), method: :get
app/config/routes.rb
resources :users, only: [:index, :show, :userfavorite] do
get :userfavorite, on: :member
end
属性:favorite_users
c_user_id:integer user_id:integer
(=> c_user_id 当前用户 ID - 因此正在添加收藏用户的用户)
我希望提供的数据足够,如果不够请告诉我。感谢您的所有回复。
这是我的建议:
user.rb
userfavorites
- 将列出您收藏的所有用户
has_many :favorite_relationships, class_name: "FavoriteUser", foreign_key: "c_user_id"
has_many :userfavorites, through: :favorite_relationships, source: :user
userfavorited_by
- 将列出收藏您的所有用户
has_many :favorited_relationships, class_name: "FavoriteUser", foreign_key: "user_id"
has_many :userfavorited_by, through: :favorited_relationships, source: :c_user
最喜欢的用户
已编辑:
class FavoriteUser < ActiveRecord::Base
belongs_to :c_user, class_name: "User"
belongs_to :user, class_name: "User"
end
进行更改后,请确保 test
首先在您的 console
中确认关系有效。然后在您的视图、控制器等中进行适当的更改...
嗨,
这令人沮丧。我知道这里出了什么问题,但我没有解决办法。
首先报错,点击'Favorite'时提示(/app/views/users/index.html.haml)
ActiveRecord::HasManyThroughSourceAssociationNotFoundError in UsersController#userfavorite
Could not find the source association(s) "userfavorite" or :userfavorites in model FavoriteUser. Try 'has_many :userfavorites, :through => :favorite_users, :source => <name>'. Is it one of c_user_id or user_id?
请求:参数:
{"_method"=>"get",
"authenticity_token"=>"VkZF4RtOBSXLFw8mygor24Ty/Efx5uSWxto4qRWf1szu3YwFe1/F5+7QtEXXZv9eaQEQvM5O8ELX95wmPLdZYQ==",
"type"=>"favorite", # What i am doing
"id"=>"1"} # My user id
我的目标是让Users(来自用户模型)通过favoriteuser模型来收藏其他用户(用户模型)。这里的冲突:我无法正确关联,因为我只有一个数据来自的模型。
让我快速向您展示代码! (冲突 user.rb)
app/models/favorite_user.rb
class FavoriteUser < ActiveRecord::Base
belongs_to :c_user_id
belongs_to :user_id
end
app/models/user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :tools
# Favorite tools of user
has_many :favorite_tools # just the 'relationships'
has_many :favorites, through: :favorite_tools, source: :tool # the actual tools the user favorites
# Favorite users of user
has_many :favorite_users # just the 'relationships'
has_many :userfavorites, through: :favorite_users, source: :user # conflicting! Can't link to userscontroller cause it belongs to the user model, the model we are at right now.
has_many :userfavorited_by, through: :favourite_users, source: :user # conflicting! Can't link to userscontroller cause it belongs to the user model, the model we are at right now.
mount_uploader :avatar_filename, AvatarUploader
end
app/controllers/users_controller.rb
class UsersController < ApplicationController
before_action :find_user, only: [:show, :favorite]
# Add and remove favorite recipes
# for current_user
def userfavorite
type = params[:type]
if type == "favorite"
current_user.userfavorites << @user
redirect_to :back
elsif type == "unfavorite"
current_user.userfavorites.delete(@user)
redirect_to :back
else
# Type missing, nothing happens
redirect_to :back, notice: 'Nothing happened.'
end
end
def index
@users = User.all
end
def show
@tools = Tool.where(user_id: @user).order("created_at DESC")
@tool = Tool.find(1)
end
private
def find_user
@user = User.find(params[:id])
end
end
app/views/users/index.html.haml
- @users.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", favorite_user_path(user, type: "favorite"), method: :get
%p= link_to "Unfavorite", favorite_user_path(user, type: "unfavorite"), method: :get
app/config/routes.rb
resources :users, only: [:index, :show, :userfavorite] do
get :userfavorite, on: :member
end
属性:favorite_users
c_user_id:integer user_id:integer
(=> c_user_id 当前用户 ID - 因此正在添加收藏用户的用户)
我希望提供的数据足够,如果不够请告诉我。感谢您的所有回复。
这是我的建议:
user.rb
userfavorites
- 将列出您收藏的所有用户
has_many :favorite_relationships, class_name: "FavoriteUser", foreign_key: "c_user_id"
has_many :userfavorites, through: :favorite_relationships, source: :user
userfavorited_by
- 将列出收藏您的所有用户
has_many :favorited_relationships, class_name: "FavoriteUser", foreign_key: "user_id"
has_many :userfavorited_by, through: :favorited_relationships, source: :c_user
最喜欢的用户
已编辑:
class FavoriteUser < ActiveRecord::Base
belongs_to :c_user, class_name: "User"
belongs_to :user, class_name: "User"
end
进行更改后,请确保 test
首先在您的 console
中确认关系有效。然后在您的视图、控制器等中进行适当的更改...