2011-09-28 60 views
0

我对RoR非常陌生,在学习中遇到障碍。 我创建了一个针对表演者数据库表的脚手架,该表具有与流派表相关的外键作为表演者流派的查找表。Rails为实例变量增加值

我正在试图做的是使用来自当前表演者行的genre_id在针对流派表的查找中提取流派名称。我在列表动作中按照需要工作,除了我似乎无法弄清楚如何在@performer实例变量中添加“genre_name”=> @genre [:genre_name],以便它传播到视图。

在我的列表动作中,我有以下代码,但我显然做错了,并且非常感谢,如果有人能够引导我。

def list 
    @performer_pages, @performers = paginate :performers, :per_page => 10 
    @performers.each do |performer| 
     #logger.debug(performer[:genre_id]) 
     @genre = Genre.find(performer[:genre_id], :select => 'genre_name') 

     @performers[performer[:id]][:genre_name] = @genre[:genre_name] 
     ^-- THIS IS THE LINE I AM STUCK ON 
    end 

    logger.debug(@performers.inspect) 
    end 

感谢

回答

1

你应该使用协会,他们会做出这样很容易。

在您的Performer模型中,您应该有一个belongs_to :genre线。

在你的流派模型中,你应该有一个has_many :performers行。

现在,在你的代码,你可以用这个访问名称的流派:(假设你已经有一个@performer

@performer.genre.genre_name

我希望这有助于让你在正确的轨道上!

+0

哦......我想我应该提到这一点。在我的表演模特里,我有has_one:流派,在我的流派模特中,我有belongs_to:表演者。我应该将其更改为has_many吗? – Skittles

+0

啊......所以我把它弄倒了。不。在我的数据库中,我有FK约束,而表演者有genre_id字段,genres是genre_name基于该id的查找表。那么,我需要反转belongs_to,然后has_one,是吗? – Skittles

+0

正确。另外Rails有时在数据库级别不适合FK约束,因为它在应用程序级别上执行它们的时间和地点有它自己的规则。现在保留它,但要注意它。 – ctcherry