Rails 4活动记录关联

时间:2014-03-31 06:19:29

标签: ruby-on-rails-4 associations

尽管经历了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会有意义,但似乎并非如此。

2 个答案:

答案 0 :(得分:0)

第一件事:

User.rb

has_many :customer_ratings, foreign_key: 'customer_id'

第二件事是:

Providercustomer都是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