Rails 3 - лучший способ ... я новичок! - PullRequest
0 голосов
/ 20 апреля 2011

Пожалуйста, можете ли вы предложить мне лучший способ сделать это:

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

EDIT

В моем приложении Rails содержимое может быть вставлено на многих языках, но отображается только на одном из них. Другие языки используются только в качестве вывода XML. Однако основная причина, по которой я использую этот подход, заключается в том, что без атрибута «имя» я не смог бы создать коллекцию, подобную этой:

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

Можете ли вы предложить мне, как сделать это без атрибута "имя" в моей деятельности?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 20 апреля 2011

Вы можете сделать что-то вроде этого.

info = @activity.infos.select{|info| info.language_id == 1}.last
@activity.name = info.title
3 голосов
/ 20 апреля 2011

То же, что и остальные, но с использованием синтаксиса ARrel, который доступен в rails 3.

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

Как уже упоминали другие ... вы можете пересмотреть свой дизайн. Если вы предоставите более подробную информацию о том, почему вы пытаетесь это сделать, мы сможем помочь с базовым проектом, который приведет к этому.

2 голосов
/ 20 апреля 2011

Ну, вы можете потерять итерацию ...

@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?

Но, как уже упоминалось в комментариях, это странный подход - похоже, что-то структурно не так с вашим приложением / данными, если вы пытаетесь присвоить значение таким способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...