我对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中显示它。
非常感谢任何帮助。
答案 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
所有权的新帖子。这就是你通过协会建立关系的方式。
我希望这有助于清理一段时间的关系,如果不是这里有一些可能有帮助的文档。