2017-05-14 54 views
0

我有3種型號如何使用每個迭代器來顯示所有@ instanceVariable.find的)結果(屬性

一,項目

3.Post

class Project < ActiveRecord::Base 
    has_many :projectdepartments 
    has_many :departments, through: :projectdepartments 
    has_many :posts, as: :postable 
end 

class Department < ActiveRecord::Base 
    validates :name, presence:true 
    belongs_to :company 
    has_many :projectdepartments 
    has_many :projects, through: :projectdepartments 
    has_many :posts, as: :postable 
end 

class Post < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :postable, polymorphic: true 
end 

@project@postable其中many_to_many協會與@department和每個部門都有它的名字

我的問題是: 當我使用柱控制器
@postable.departments.first.name
@postable.departments.find(2).name
它會顯示正確的結果,我需要像分別
「銷售」,
「會計」`。

然而,當我需要向他們展示所有和使用迭代器像下面

@postable.departments.each do |department| 
    department.name 
end 

結果成爲"department-0x007f26c9993378", "department-0x007f26c9992ae0"

class PostsController < ApplicationController 
    def new 
    @post = Post.new 
    end 

    def create  
    @post = @postable.posts.build(post_params) 
    @post.user = current_user 
    @post.tag = put_tag 
    if @post.save 
     redirect_to @postable, notice: "Created" 
    else 
     render :new 
    end 
    end 

private 
    def put_tag 
#  @postable.departments.first.name #This line work if uncomment 
#  @postable.departments.find(2).name #This work fine as well if uncomment 
    @postable.departments.each do |department| 
     department.name 
    end 
    end 

    def post_params 
    params.require(:post).permit(:content, :user_id, :tag) 
    end 
end 

我試圖嵌套迭代器,它仍然無法正常工作。

鑑於:

<% @posts.each do |post|%> 
    <%= simple_format post.content %> 
    <%= post.tag.map {|t| t}%> 
<% end %> 

我的問題是,如何顯示的
所有的結果@ postable.departments.first.name
@ postable.departments.find(2)。命名如果有任何
@ postable.departments.find(3).NAME ....等適當


「銷售」,「會計」,而不是「部門 - 0X007F(隨機數每次)」,「HR」

+0

我想我們需要更多的信息。你在哪裏運行'@ postable.departments.each ...'?在視圖中,控制器,控制檯等?如果你可以發佈你正在調用的大部分文件,這將有所幫助。 – kcdragon

+0

我在後控制器中做了一個方法,並希望結果顯示在視圖中。 –

+0

您可以編輯您的文章,以包含它出現在控制器和視圖中的代碼嗎?我們需要看到實際的代碼。 – kcdragon

回答

0

put_tag方法沒有返回你認爲它返回。所有的方法都是重複調用這個數組,然後返回@postable,而不是返回數組名稱,department.name。你應該在這種情況下使用collect代替each

def put_tag 
    @postable.departments.collect do |department| 
    department.name 
    end 
end 

這相當於是這樣的:

def put_tag 
    names = [] 
    @postable.departments.each do |department| 
    names << department.name 
    end 
    names 
end 
相關問題