0

我有一個Ruby on Rails的系統下拉菜單中使用數據,由此我有表:用戶,UserAccounts,帳戶和電子郵件與架構:Ruby on Rails的:顯示從另一個模型

User (id, firstname, surname, password) 
UserAccount (user_id, account_id) 
Account (id, emailaddress, port, domain) 
Email (id, account_id, subject, message) 

我我試圖做的是在創建新電子郵件時,我希望所有用戶的帳戶'emailaddress變量顯示在視圖中的下拉菜單中,當用戶單擊保存時,我希望將account_id保存在電子郵件表中。

在一刻起,我可以在下拉菜單中的views/emails/_form.html.erb與下面的代碼顯示account_id

<%= 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」爲#<#:0x72cde60>`

任何人都可以請幫忙嗎?

我對整個表格的代碼是:

<%= 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

您還沒有發佈相當足夠的代碼能夠幫助你了。至少需要看到你正在把這個collection_select的表格放在......假設它是你想要發送的新電子郵件的一種形式?

順便說一句,擁有複數Active Record類名是非常不尋常的。打破Rails命名約定是讓自己陷入混亂局面的好方法。

+0

感謝您的建議,我的班級名稱不是複數,我只是傾向於多元化討論中的數據庫表名,以便更容易地看到它們包含許多記錄。我已經上傳了其餘的視圖,但我不覺得它會告訴你很多。 –

1

select代替collection_select更容易。我還假設你在用戶模型中有has_many through關聯。

f.select :account_id, User.find(session[:user_id]).accounts.map{ |a| [a.emailaddress, a.id] } 

collection_select將方法名稱作爲參數,它不會在你的情況下工作。