【问题标题】:email Model and email column clashing in RailsRails 中的电子邮件模型和电子邮件列冲突
【发布时间】:2013-04-13 18:44:36
【问题描述】:

我有一个 Submitter 模型,它有一个 email 列。我还有一个 Email 模型,其中包含电子邮件 suffix 列。

我的问题(我相信)是因为我的提交者模型有一个电子邮件列,当我尝试使用 submitter.email.suffix 在我的电子邮件模型中显示后缀时,它说没有定义方法。

知道我可以在这里做什么吗?

查看:

<% @submitters.each do |submitter| %>  <tr>
<td><%= submitter.school.name %></td>
<td><%= submitter.first_name %></td>
<td><%= submitter.last_name %></td>
<td><%= submitter.email %><%= submitter.email.suffix %></td>
<td><%= link_to 'Show', submitter %></td>
<td><%= link_to 'Edit', edit_submitter_path(submitter) %></td>
<td><%= link_to 'Destroy', submitter, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
<% end %>
</table>

作为旁注,我没有问题显示电子邮件后缀的 ID,但显然我试图显示实际的后缀:

<td><%= submitter.email %><%= submitter.email_suffix_id %></td>

Submitter.rb 有一个 has many :emails 并且 Email.rb 有一个 belongs_to :submitter 关联。

【问题讨论】:

  • suffix 是电子邮件的方法吗?
  • suffix 是我的 Email 模型中的一列,所以我认为它是..

标签: ruby-on-rails email database-design


【解决方案1】:

所以让我们分解一下。你说你正在努力做

submitter.email.suffix

但是,您的模型没有这样的 :email 关联。相反,您已经声明您的 Submitter 模型具有

has_many :emails

这意味着:

  1. 要在某些Submitter 实例submitter 上打印:email 属性,请使用

    puts submitter.email
    
  2. 要通过has_many 关联打印与submitter 相关的每个Email 实例的:prefix 属性,您需要遍历它们

    submitter.emails.each do |e|
      puts e.suffix
    done
    

目前还不清楚您究竟要尝试做什么,但希望这能消除您的一些困惑; 目前没有方法命名冲突

【讨论】:

  • 这给了我和以前一样的错误,很奇怪。谢谢你的建议
  • 更具体地说,错误是undefined method 'suffix' for "Devin.ODaniel":String,其中Devin.ODaniel 是存储在我的:email 属性中的内容。因此,它将submitter.email.suffix 中的 email 视为一种方法,而不是尝试访问我的电子邮件模型。这有帮助吗?
  • 我认为你忽略了我的建议。 submitter.email 返回一个字符串,例如 "Devin.ODaniel"not 一个 Email 模型。你得到了undefined method 'suffix' error,因为你在String实例上调用suffix不是Email的实例。你说过你的Submitter has_many :emails。如果你想在Submitter 的一个相关Email 实例上调用suffix(例如,集合中的第一个),你可以使用submitter.emails.first.suffix
【解决方案2】:

submitter.email.suffix 不起作用,因为它返回 Submitter "email",它是一个字符串,而不是 Email 实例。

submitter.emails.each(&:suffix)

应该可以。 submitter.emails 将返回一个电子邮件的实例,它们确实有 suffix 方法(根据你的话)。

【讨论】:

  • 这也会返回相同的错误。也许我的联想错了?
  • 更具体地说,错误是undefined method 'suffix' for "Devin.ODaniel":String,其中Devin.ODaniel 是存储在我的:email 属性中的内容。因此,它将submitter.email.suffix 中的 email 视为一种方法,而不是尝试访问我的电子邮件模型。这有帮助吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-29
  • 2014-09-17
  • 2017-05-13
  • 2011-11-10
  • 2019-09-06
  • 2022-06-16
  • 2010-12-18
  • 2013-08-02
相关资源
最近更新 更多