Ruby on rails一对多关联

时间:2016-02-27 01:03:06

标签: ruby-on-rails ruby

我对rails很新。我有一对多协会。表1有几个字段。一个字段是标题位置,另一个是标题ccode。表2如何只有2个字段,第一个字段也是位置,第二个字段也是ccode。这张桌子只是为了保住我的位置。在表1中,当我创建一个对象时,我分配了ccode,我想从Table2获取相应的ccode代码。表2 has_many表1和表1属于表2。另外,我想在<table>标记中显示索引视图中的位置。我认为我的视图代码看起来就像我找到的例子,我对html的了解非常好。我得到的问题是我的Table2对象返回nil。

这是Table1的模型。

class Table1 < ActiveRecord::Base
    belongs_to :table_2

    require 'csv'

    def self.import(file)
        CSV.foreach(file.path, headers: true, row_sep: :auto, col_sep: "\t") do |row|
            Table1.create! row.to_hash
        end
    end
end

这是我的Table2模型。

class Table2 < ActiveRecord::Base
    self.table_name = 'table_2'
    self.primary_key = 'ccode'
    has_many :table1
end

这是Table1Controller的样子

class FinancialsController < ApplicationController

    def index
        @financials = Financial.all
    end

    def create
        @financial_loc_ccode = FinancialLocCcode.create(location_code: params[:location_cd], ccode: @financials.ccode)
    end
end

我没有Table2控制器,一切都在Table1控制器中完成,我认为是因为当我启动这个项目时,已经为Table2创建了一个表。

就像我之前说的那样,我对rails非常陌生并且仍在学习模型和控制器之间的联系,以及如何操作数据并且已经在html中显示它。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

我将专注于Table2为零。

它没有,因为你没有创造它。

进入终端并输入rails g controller table2 create

打开该文件,在空create方法内部,您将创建新的Table2对象。

你可以通过很多方式做到这一点,但是当你有关联时最重要的事情就是你需要在创建时定义关联。

我会举个例子:

假设我有一个用户模型

用户模型

class User < ActiveRecord::Base
has_many :posts

end

现在让我说我有一个Post模型,我希望用户能够创建很多帖子。

发布模型

class Post < ActiveRecord::Base
belongs_to :user

end

现在这是我们将使用table2控制器的重要部分

当我创建新帖子时,它必须belongs_to用户,因此我们会这样做

后置控制器

class PostsController < ApplicationController

  def create
    #store the object that has many posts as a variable
    @user = current_user

    #the important part, when you create a post you need to do this
    @post = @user.posts.create(post_params)
  end

end

这里发生的事情是,Rails正在创建@user所有权的新帖子。这就是你通过协会建立关系的方式。

我希望这有助于清理一段时间的关系,如果不是这里有一些可能有帮助的文档。

http://guides.rubyonrails.org/association_basics.html