Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 用外键连接rails中的用户模型和事件模型?_Ruby On Rails_Ruby On Rails 3_Model_Controller_Foreign Keys - Fatal编程技术网

Ruby on rails 用外键连接rails中的用户模型和事件模型?

Ruby on rails 用外键连接rails中的用户模型和事件模型?,ruby-on-rails,ruby-on-rails-3,model,controller,foreign-keys,Ruby On Rails,Ruby On Rails 3,Model,Controller,Foreign Keys,--更新:我一直在做更多的阅读,看起来我应该添加一个外键-有人能告诉我怎么做吗?我应该删除我创建的那些额外字段吗 -- 我是RubyonRails新手,在一些基本概念上遇到了问题。我刚刚读完迈克尔·哈特尔的书,我正在使用RailsApps引导设计cancan模板开始我的第一个应用程序 我有一个用户模型和一个事件模型。我希望用户能够发布许多活动,也可以参加许多活动。我将字段events\u atticing和created\u events添加到用户表中,事件表包括users\u atticing

--更新:我一直在做更多的阅读,看起来我应该添加一个外键-有人能告诉我怎么做吗?我应该删除我创建的那些额外字段吗

--

我是RubyonRails新手,在一些基本概念上遇到了问题。我刚刚读完迈克尔·哈特尔的书,我正在使用RailsApps引导设计cancan模板开始我的第一个应用程序

我有一个用户模型和一个事件模型。我希望用户能够发布许多活动,也可以参加许多活动。我将字段events\u atticing和created\u events添加到用户表中,事件表包括users\u atticing和User\u created。我正在尝试这样做,以便在提交“创建事件”表单时,用户创建的字段将填充发布事件的用户,并且该事件id将记录在“创建的事件”下的用户表中

我已将以下内容添加到事件模型中:

  belongs_to :user
  has_many :users
对于用户模型(尽管我不确定这是否正确,因为用户可以属于多个事件。我研究了has_和_属于_许多,并认为这可能是正确的方式……):

我不知道该在控制器中加入什么来达到想要的效果。这是事件控制器中当前的内容:

  def create
    @event = Event.new(params[:event])

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

我应该向控制器添加什么,我还缺少什么?如果需要查看更多代码,请告诉我。谢谢

此问题的答案可在和中找到。很明显,您还没有掌握模型关系的基础知识,您应该多读一点。我会尽力帮助你:

Users has_many events是用户创建的事件的关系。该关系在数据库中建模为事件表上的用户id列。因此,当用户创建一个事件时,users id作为user_id.Rails保存在事件记录中,然后为您提供诸如user.events之类的助手方法来获取用户创建的所有事件

另一个关系,即参加活动的用户,需要一个单独的表。您可以通过检查关系来了解原因。上面提到的用户和事件之间的关系是一对多关系,一个用户可以创建多个事件,但每个事件只属于一个用户。这里的关系是多对多关系,一个事件可以被多个用户访问,每个用户可以访问多个事件。没有办法在关系数据库中以规范化的方式存储这些信息。无论您查看关系的哪一侧,用户或事件,数据都是一个数组

这个问题的解决方案是一个连接表,在这个表中有成对的用户ID和事件ID。Rails也可以处理这种关系,简称为关系或habtm。谷歌搜索将为您提供有关如何设置和使用它的信息

我还要补充一点:如果您只想从一个角度查看关系,如中所示,您将调用user.event\u访问但从不调用event.visting\u用户,您可以在用户模型中使用一列并跳过联接表。您需要的是一组事件ID,然后可以使用这些ID获取用户将访问的所有事件。以这种方式处理数据不是标准化的(因此DBA不赞成),但根据您的需要,这种方式是合理的。这需要你多做一些工作

  def create
    @event = Event.new(params[:event])

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