尽管经历了http://guides.rubyonrails.org/association_basics.html,但我的rails应用程序中仍存在特定关联的问题。
我有一个用户模型,用户可以是客户或提供商。然后,我允许客户通过provider_rating模型对提供商进行评级:
我目前有以下协会:
User.rb
has_many :customer_ratings, foreign_key: 'customer'
Customer_rating.rb
belongs_to :user
处理协会的正确方法是什么,在这种情况下,用户既可以收到评分也可以给出评分?
我认为has_and_belongs_to_many会有意义,但似乎并非如此。
答案 0 :(得分:0)
第一件事:
User.rb
has_many :customer_ratings, foreign_key: 'customer_id'
第二件事是:
Provider
和customer
都是User
所以,你应该使用这个宝石
https://github.com/EppO/rolify
使用户不知所措。
然后,您可以使用用户角色存储评级,以确定哪个用户评价哪个用户。
答案 1 :(得分:0)
我最终在不使用Rolify的情况下解决了这个问题。在我的用户表中,我有一个字段,这是user_type,有人选择客户或提供商。一旦这个客户/提供者字段在provider_rating表单中填充,我就可以保持关联:
has_many :customer_ratings, foreign_key: 'customer'
在为客户创建评级时,我在客户评级控制器中使用了以下内容:
def create
@user = User.find(params[:customer])
@cust_rating = @user.customer_ratings.build(customer_rating_params)
respond_to do |format|
if @cust_rating.save
format.html { redirect_to @user, notice: 'Thanks, your customer feedback has been recorded!' }
format.json { render action: 'show', status: :created, location: @customer_rating }
else
format.html { render action: 'new' }
format.json { render json: @customer_rating.errors, status: :unprocessable_entity }
end
end
end
并使用
访问提供商详细信息customer_rating.provider