我有一个Ruby on Rails系统,我有这些表:用户,UserAccounts,帐户和带有模式的电子邮件:
User (id, firstname, surname, password)
UserAccount (user_id, account_id)
Account (id, emailaddress, port, domain)
Email (id, account_id, subject, message)
我要做的是在创建新电子邮件时,我想要所有用户的帐户' emailaddress
变量显示在下拉菜单中的视图上,当用户点击保存时,我希望将account_id
保存在电子邮件表格中。
我可以在account_id
的下拉菜单中使用以下代码行显示views/emails/_form.html.erb
:
<%= f.collection_select :account_id, Useraccount.where(user_id: session[:user_id]), :account_id, :account_id %>
但我无法更改此内容以显示电子邮件地址,我已尝试使用以下代码:
<%= f.collection_select :account_id, Useraccount.where(user_id: session[:user_id]), :account_id, :Account.where(id: account_id).email %>
但是这给了我错误undefined local variable or method
account_id&#39;对于#&lt;#:0x72cde60&gt;`
有人可以帮忙吗?
表单的完整代码是:
<%= form_for @email do |f| %>
<% if @email.errors.any? %>
<div id="error_explanation">
<h2>
<%= pluralize(@email.errors.count, "error") %> prohibited this email from being saved:
</h2>
<ul>
<% @email.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.collection_select :account_id, Useraccount.where(user_id: session[:user_id]), :account_id, :Account.where(id: account_id).email %>
<p>
<%= f.label :subject %><br>
<%= f.text_field :subject %>
</p>
<p>
<%= f.label :message %><br>
<%= f.text_area :message %>
</p>
<p>
<%= f.submit %>
</p>
答案 0 :(得分:0)
您还没有发布足够的代码来帮助您。至少需要查看您将collection_select
放在哪个表单上...假设它是您要发送的新电子邮件的表单?
顺便说一句,拥有复数的Active Record类名是非常罕见的。 Breaking Rails命名约定是让自己陷入混乱局面的好方法。
答案 1 :(得分:0)
使用select
代替collection_select
更容易。我还假设您在用户模型中有has_many through
关联。
f.select :account_id, User.find(session[:user_id]).accounts.map{ |a| [a.emailaddress, a.id] }
collection_select
将方法名称作为参数,它只适用于您的情况。