Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заполнение collection_select 
:(
    Опции темы
masterbloger
  Дата 7.7.2011, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.7.2011

Репутация: нет
Всего: нет



Здравствуйте! 
Есть такой код:
Код

collection_select( :feature_id, Issue.find(:all, :conditions => "(project_id = #{@project.id})and(tracker_id = 2)"), :id, :subject, {:include_blank => 'Please Select'})


Он выводит на экран выпадающий список с набором записей которые берутся из таблицы Issue базы данных. Сейчас в списке отображается только параметр subject, но мне нужно отображать запись в виде #id: subject. Помогите пожалуйста разобраться с этой задачей, а то я с Руби только недавно работаю. 
PM MAIL   Вверх
masterbloger
Дата 8.7.2011, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.7.2011

Репутация: нет
Всего: нет



Сделал как написано в документации.
Код

class UserStory < ActiveRecord::Base
  belongs_to :issue
end

class Issue < ActiveRecord::Base
  has_many :user_stories

  def subject_with_id
    "#{id}. #{subject}"
  end
end


Код

f.collection_select(:feature_id, Issue.find(:all, :conditions => "(project_id = #{@project.id})and(tracker_id = 2)"), :id, :subject_with_id, {:include_blank => 'Please Select'})


Не помогло. Так вообще не работает.

Это сообщение отредактировал(а) masterbloger - 8.7.2011, 10:59
PM MAIL   Вверх
source777
Дата 8.7.2011, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Во-первых, перенеси обращение к модели в контроллер и желательно в виде:
Код

@issues = Issue.where(:project_id => @project.id,  :tracker_id => 2)

А то привыкнешь ещё уязвимый для SQL-Injections код писать...

А во view попробуй:
<%= f.select(:feature_id, @issues.collect {|iss| [ "##{iss.id}: #{iss.subject}", iss.id ] }, { :include_blank => true }) %>
или
<%= select(@your_object, :feature_id, @issues.collect {|iss| [ "##{iss.id}: #{iss.subject}", iss.id ] }, { :include_blank => true }) %>
или, допуская вероятность нестандартной формы, даже так:
<%= select(:feature_id, @issues.collect {|iss| [ "##{iss.id}: #{iss.subject}", iss.id ] }, { :include_blank => true }) %>

Курсив заменить на свои значения

Это сообщение отредактировал(а) source777 - 8.7.2011, 12:24


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
masterbloger
Дата 8.7.2011, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.7.2011

Репутация: нет
Всего: нет



Цитата(source777 @  8.7.2011,  12:18 Найти цитируемый пост)
Во-первых, перенеси обращение к модели в контроллер и желательно в виде:
Выделить всёБез подсветки
1:
    
@issues = Issue.where(:project_id => @project.id,  :tracker_id => 2)


Обращение к модели перенес в контроллер. но в том виде что Вы предложили оно почему-то не работает.
А вот так заработало:
Код

@issues = Issue.find(:all, :conditions => "(project_id = #{@project.id})and(tracker_id = 2)")


добавил в форму следующий код:
Код

f.select(:feature_id, @issues.collect {|iss| [ "##{iss.id}: #{iss.subject}", iss.id ] }, { :include_blank => true })


и получил, то что хотел
А в чём разница между find и where? И почему не сработал where?
PM MAIL   Вверх
source777
Дата 8.7.2011, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 12
Всего: 56



Цитата(masterbloger @  8.7.2011,  14:47 Найти цитируемый пост)
А в чём разница между find и where? И почему не сработал where? 

Я рассчитывал, что ты используешь Rails 3.x, для Rails 2.x должно быть так:
Код

@issues = Issue.find(:all, :conditions => {:project_id => @project.id,  :tracker_id => 2})


Добавлено через 6 минут и 12 секунд
Подробнее на эту тему почитай в статье: http://m.onkey.org/active-record-query-interface
На мой взгляд для новичка не слишком дальновидно привыкать использовать deprecated методы. Хотя legacy-кода хватает...  smile 


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
masterbloger
Дата 11.7.2011, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 7.7.2011

Репутация: нет
Всего: нет



Спасибо большое за ссылки и советы.
То есть, получается, что мой код просто не будет работать на Rails 3.1.
А так вообще в методе find нет ничего опасного.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Ruby on Rails"
source777
  • С чего начать? начинаем
  • Документацию смотрим тут
  • Обязательно следуйте правилам Vingrad.
  • Пожалуйста, прочитайте рекомендации по работе в форуме и навигации по Vingrad.
  • Для вставки кодов Ruby используйте тег: [code=ruby]код[/code]. Когда в будущем подсветка синтаксиса для Ruby будет реализована, весь исходных код преобразится.
  • Используйтe чекбокс "Транслит" (возле кнопок кодов), если у Вас нет русских шрифтов.
  • Помните, для каждого вопроса должна быть своя тема.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, source777.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Ruby On Rails | Следующая тема »


 




[ Время генерации скрипта: 0.0556 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.