首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过关联和集合与数组创建Rails

通过关联和集合与数组创建Rails
EN

Stack Overflow用户
提问于 2015-11-19 05:51:43
回答 1查看 37关注 0票数 2

我对活动记录中的一些关联概念感到困惑。

我有三个模型User,Bank和Bankaccount。用户和银行都建立了"has_many“银行帐户模型,银行帐户模型也建立了"belongs_to”模型。我使用以下语法通过与User的关联来创建Bankaccount

代码语言:javascript
复制
@bankaccount = @user.bankaccounts.create(bankaccount_params)

如果我想同时通过关联User和关联Bank来创建一个Bank and对象,那么合适的语法是什么?

我的第二个问题与这个问题有关。现在,因为我不确定如何通过这两个关联创建银行帐户,所以我通过手动设置参数来处理与银行的关联

代码语言:javascript
复制
  bank_id = params[:bank_id]

但是,当我想遍历所有银行帐户并检索相关银行的名称时,这似乎会触发一些问题。

在我看来我有

代码语言:javascript
复制
<% @bankaccounts.each do |bankaccount| %>
<%= bankaccount.bank %>

我拿到了一份清单

代码语言:javascript
复制
#<Bank:0x007f7a66618ef0>
#<Bank:0x007f7a664c9ab8>

如果我想知道银行的名字

代码语言:javascript
复制
<% @bankaccounts.each do |bankaccount| %>
<%= bankaccount.bank.name %>

我得到了一个未定义的nil类的方法名。我确实通过以下简单的几行在控制台中获得了银行的名称

代码语言:javascript
复制
bankaccount = Bankaccount.find(1)
bankaccount.bank.name

您能给我更多关于这些概念的背景知识,并为我提供适当的语法来循环访问我的集合@user.bankaccount,并为每个银行帐户检索相关银行的名称吗?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-11-19 08:22:56

您必须选择一个关联来创建银行帐户,然后分别设置第二个关联:

代码语言:javascript
复制
@bankaccount = @user.bankaccounts.new(bankaccount_params)
@bankaccount.bank = somebank
@bankaccount.save

代码语言:javascript
复制
@bankaccount = @bank.bankaccounts.new(bankaccount_params)
@bankaccount.user = someuser
@bankaccount.save

此外,我不明白为什么手动使用参数设置第二个关联会导致您正在经历的其他问题。这应该没问题(假设具有此id的银行确实存在):

代码语言:javascript
复制
@bankaccount.bank_id = params[:bank_id]

如果您选择将外键指定为参数,则可以将其滚动到强参数中,并将其与其他所有内容一起传递到银行帐户模型中。例如:

代码语言:javascript
复制
def bankaccount_params
  params.require(:bankaccount).permit(:bank_id, ...)
end

你上一个关于数组和集合的问题取决于你想要做什么。首先,如果您对银行帐户的银行名称特别感兴趣,请使其更容易获取:

代码语言:javascript
复制
class Bankaccount
  belongs_to :bank
  ...
  def bank_name
    bank.name
  end
end

对于那些购买这些东西的人来说,这也防止了德米特定律的违反。

如果您只是想在视图中列出@bankaccounts的银行名称,请尝试利用Rails部分,如下所示:

应用程序/视图/银行帐户/index.html.erb

代码语言:javascript
复制
<%= render @bankaccounts %>

应用程序/视图/银行帐户/_views account.html.erb

代码语言:javascript
复制
<%= bankaccount.bank_name %>

更多信息请点击这里:http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

如果您出于其他原因循环@bankaccounts,那么您提供的代码应该可以工作,因为@bankaccounts表示ActiveRecord关系,而不是一个简单的数组:

代码语言:javascript
复制
<% @bankaccounts.each do |bankaccount| %>
  <%= bankaccount.bank_name %>
<% end %>   

因为你得到了一个未定义的方法错误,你的问题可能源于你是如何构建@ from帐户的。如果你是这样做的.

代码语言:javascript
复制
@bankaccounts = @user.bankaccounts

...and如果您已经在控制台中验证了所有内容都正确关联,那么您的问题很可能与数组或集合无关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33791118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档