【问题标题】:Association in rails using mongodb as database使用 mongodb 作为数据库的 Rails 关联
【发布时间】:2012-10-03 10:17:48
【问题描述】:

我正在使用设计。它将当前用户 ID 设为

current_user.id

有很多用户。有一个控制器名称为 empsals_controller.rb

class EmpsalsController < ApplicationController

  def index
    @empsals = Empsal.all


  end

  def show
    @empsal = Empsal.find(params[:id])

  end

  def new
    @empsal = Empsal.new


  end


  def edit
    @empsal = Empsal.find(params[:id])
  end

  def create
    @empsal = Empsal.new(params[:empsal])

    respond_to do |format|
      if @empsal.save
        format.html { redirect_to @empsal, notice: 'Empsal was successfully created.' }
        format.json { render json: @empsal, status: :created, location: @empsal }
      else
        format.html { render action: "new" }
        format.json { render json: @empsal.errors, status: :unprocessable_entity }
      end
    end
  end

  def update
    @empsal = Empsal.find(params[:id])

    respond_to do |format|
      if @empsal.update_attributes(params[:empsal])
        format.html { redirect_to @empsal, notice: 'Empsal was successfully updated.' }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @empsal.errors, status: :unprocessable_entity }
      end
    end
  end

  def destroy
    @empsal = Empsal.find(params[:id])
    @empsal.destroy

    respond_to do |format|
      format.html { redirect_to empsals_url }
      format.json { head :no_content }
    end
  end

这个控制器的型号是

class Empsal
  include Mongoid::Document
   belongs_to :paygrade
  field :salary_component, type: String
  field :pay_frequency, type: String
  field :currency, type: String
  field :amount, type: String
  field :comments, type: String
 validates_presence_of :pay_frequency

end

我想与具有模型 user.rb 的设备建立关联,以便相关用户可以查看他们的相关数据。

class User
  include Mongoid::Document
  include Mongoid::Timestamps
devise :database_authenticatable, :registerable, #:confirmable,
         :recoverable, :rememberable, :trackable, :validatable, :timeoutable, :timeout_in => 2.minutes
   field :role
end

【问题讨论】:

    标签: ruby-on-rails mongodb associations mongoid


    【解决方案1】:

    除了在 User 模型中设置反向关联之外,您拥有所需的一切:

    class User
      include Mongoid::Document
      include Mongoid::Timestamps
    
      has_many :empsals # <<<<<<< added line
    
      devise :database_authenticatable, :registerable, #:confirmable,
             :recoverable, :rememberable, :trackable, :validatable, :timeoutable, :timeout_in => 2.minutes
       field :role
    end
    

    请参阅http://mongoid.org/en/mongoid/docs/relations.html#has_many 的文档

    有了这个,你可以做类似的事情

    @user.empsals # it will be a list of Empsal instances
    

    【讨论】:

    • 在 Emspsal 模型中我必须做什么?由于可能有许多与一个用户相关的数据,我如何从控制器获取数据并将其传递给视图?
    • 你想对用户做什么?你不是很清楚。
    • 用户提交的数据应该与模型用户链接,以便用户只能查看他的数据?由于用户的 id 来自 current_user.id。
    • 当我们在索引部分@empsals = Empsal.all 的控制器中编码时,我如何将数据从控制器传递到视图。由于 Empsal.all 记录了数据库中与 empsals 集合相关的所有数据。管理员也可以查看所有数据。在这里,我将用户的 ID 发送为 :empsals, :action => :index, :id => user.id %>.. 所以如果用户我应该这样设计是登录,然后他只能看到他的数据,并且通过单击该链接用户详细信息作为管理员登录,他可以查看与该员工相关的数据,因为员工的 ID 已传递
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多