2011-04-20 45 views
0

,能不能请你建议我一个更好的方式来做到这一点:Rails 3 - 一个更好的方法...我是一个新手!

@infos = @activity.infos 
@infos.each do |info| 
    @activity.name = info.title if info.language_id == 1 
end 

编辑

在我的Rails应用程序内容可以在许多语言中插入,但只有其中的一个被显示。其他语言仅用作XML输出。 但是我使用这种方式的主要原因是,没有一个“name”属性我不能够创建这样一个集合:

<%= collection_select(:event, :activity_id, @activities, :id, :name) %> 

你建议我如何做到这一点没有“名称“属性在我的活动?

谢谢!

+1

逻辑上看起来很奇怪。您是根据与活动关联的最后一个信息的language_id设置活动的名称?你能澄清你想要做什么吗? – 2011-04-20 00:57:43

+0

以什么方式更好? – 2011-04-20 00:58:20

+0

我的意思是逻辑上更好!我的方式显然是荒谬的;-) – Abramodj 2011-04-23 08:45:54

回答

3

你可以这样做。

info = @activity.infos.select{|info| info.language_id == 1}.last 
@activity.name = info.title 
2

那么,你可能会失去迭代...

@activity.name = @activity.infos.find(:first, :conditions => { :language_id => 1 }).title 

,但并不能保证你会得到一个结果(在现实世界中)。所以:

info = @activity.infos.find(:first, :conditions => { :language_id => 1 }) 
@activity.name = info.title unless info.nil? 

但由于在评论中提到这是一个奇怪的方法 - 好像有什么东西在结构上错了你的应用程序/数据,如果你想这样分配一个值。

3

相同别人,但使用ARrel语法,这是在轨道3

@activity.name = @activity.infos.where(:language_id => 1).first.title 

正如提到的其他可用...你可能要重新考虑你的设计。如果你提供了更多关于你为什么试图这样做的细节,我们可能能够帮助解决导致这一问题的基础设计。

相关问题