0

In meiner RoR-Anwendung versuche ich Informationen aus zugeordneten Tabellen in einer Ansicht anzuzeigen.Ruby on Rails: Verwenden von Funktionen zum Abrufen von Daten aus Modell

Ich habe Tabellen mit Daten wie folgt aus:

Email 
id  subject 
1  This week's work 
2  Presentation 
3  Spreadsheets 

Recipients 
email_id  group_id 
1    2 
2    2 
3    1 
1    3 

Groups 
id  name 
1   Managers 
2   Employees 
3   Directors 

Contactgroups 
group_id  contact_id 
1    1 
2    1 
1    3 
3    2 

Contacts 
id   email 
1   Gary 
2   Dave 
3   Annie 

Was ich versuche, eine Liste der Gruppen zu tun ist, angezeigt werden, die eine E-Mail sowie jedes Gruppenmitglied geschickt wurden. Zum Beispiel wurde E-Mail 1 "Die Arbeit dieser Woche" an die Gruppen 1 "Manager" und 3 "Direktoren" gesendet, die Gruppe "Manager" besteht aus den Kontakten Gary und Annie und die Gruppe "Direktoren" besteht aus dem Kontakt "Dave". Auf der Seite show.html.erb möchte ich die E-Mail-Details sowie die Gruppen, an die sie gesendet wurde, und jeden ihrer Kontakte anzeigen.

Um dies zu tun, auf der show.html.erb Seite habe ich den Code:

<p> 
    <strong>Groups Sent To:</strong></br> 
    <% @recipients.each do |recipient| %> 
     <%= recipient.group.name %> 
     <% for i in 0..count_group_members(recipient.group.id)-1 do %> 
      <%= group_member_name(recipient.group.id, i) %> 
     <% end %></br> 
    <% end %> 
</p> 

Und in meinen emails_controller Ich habe den Code:

class EmailsController < ApplicationController 
    helper_method :count_group_members, :group_member_name 
    def index 
     @useraccounts = Useraccount.where(user_id: session[:user_id]) 
     accountsarray = [0] 
     @useraccounts.each do |f| 
      accountsarray << f.account_id 
     end 
     # find all emails where the account_id is in the array - and so belongs to the user 
     @emails = Email.where(account_id: [accountsarray]) 
    end 
    def show 
     @email = Email.find(params[:id]) 
     @account = Account.find_by_id(@email.account_id) 
     @recipients = Recipient.where(email_id: @email.id) 
    end 
    def new 
     @email = Email.new 
     @email.recipients.build 
     @useraccounts = Useraccount.where(user_id: session[:user_id]) 
    end 
    def edit 
     @email = Email.find(params[:id]) 
     @useraccounts = Useraccount.where(user_id: session[:user_id]) 
    end 
    def create 
     @email = Email.new(email_params) 
     if @email.save 
      redirect_to @email 
     else 
      render 'new' 
     end 
    end 
    def update 
     @email = Email.find(params[:id]) 
     if @email.update(email_params) 
      redirect_to @email 
     else 
      render 'edit' 
     end 
    end 
    def destroy 
     @email = Email.find(params[:id]) 
     @email.destroy 
     redirect_to emails_path 
    end 
    def count_group_members(group) 
     Contactgroup.where(group_id: group).count 
    end 
    def group_member_name(group, i) 
     contact = Contactgroup.where(group_id: group).offset(i).pluck(:contact_id) 
     Contact.where(id: contact).pluck(:firstname) 
    end 
    private 
    def email_params 
     params.require(:email).permit(:subject, :message, :account_id, { contact_ids: [] }, { group_ids: [] }) 
    end 
end 

Das Problem dabei ist, dass auf dem show.html.erb Anzeigen eines Benutzers sieht die Informationen wie folgt:

Gruppen gesendet an:

Managers [ "Gary", "Annie"] [ "Annie"]

Directors [ "Dave"]

Wenn ich will, ist, wie angezeigt werden:

Gruppen verschickt an:

Manager Gary, Annie

Directors Dave

Kann mir bitte jemand dabei helfen?

Antwort

0

Alles, was ich brauchte, war zu tun, um die folgenden Zeilen in meinem Controller ändern:

def group_member_name(group, i) 
    contact = Contactgroup.where(group_id: group).offset(i).pluck(:contact_id) 
    Contact.find_by_id(contact).firstname 
end 
Verwandte Themen