0

这些是我的联想:

class User
 has_many :products
 has_many :prices
 has_many :businesses
 has_many :stores
end

class Price
 belongs_to :store
 belongs_to :user
 belongs_to :product
end

class Store
  belongs_to :user
  belongs_to :business
  has_many :prices
end

class Business
  belongs_to :user
  has_many :stores
end

class Product
  belongs_to :user
  has_many :prices
end

这些是我所做的更改,以便关联正常工作:

  1. 所有模型的表中都有 user_id。

  2. 我像上面一样把关联放在里面。

  3. 我让 CanCan 能力反映了这些变化

    def initialize(user)
      if user.role == "admin"
        can :manage, :all
      elsif user.role == "default"
        can :manage, [Price, Store, Business, Product], :user_id => user.id
        can :read, [Product, Store, Business, Price]
      end
    end
    

如果有助于了解,我正在使用设计。

当我想创建一个企业时,它允许我,但他们没有分配用户。我不知道是什么问题。我认为它会自动分配自己,就像以前用户有很多价格时一样。你认为问题是什么?

编辑


class BusinessesController < ApplicationController
  before_filter :authenticate_user!
  load_and_authorize_resource

  def show
    @business = Business.find(params[:id])
  end

  def new
    @business = Business.new
  end

  def create
    @business = Business.new(params[:business])
    if @business.save
      redirect_to new_business_path, :notice => "Successfully added."
    else
      render :new, :notice => "It seems there was an error. Please try again."
    end
  end
end
4

1 回答 1

3

您可能需要通过用户创建业务或在保存时在控制器中分配 user_id。

例如: current_user.businesses.create(params[:business]) 而不是Business.create(params[:business])

或者

Business.create(params[:business].merge(:user => current_user))

为了确保您的所有属性都被传入,请使用以下行的验证

validates_presence_of :user_id

在具有此数据列的模型上

于 2012-06-09T06:50:41.923 回答