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
    

知っておくと役立つ場合は、Deviseを使用しています。

ビジネスを作成したい場合、それは可能ですが、割り当てられたユーザーではありません。私は何が問題なのか迷っています。以前のように、ユーザーが多くの価格を持っていたときのように、自動的に割り当てられると思いました。問題は何だと思いますか?

編集


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 に答える