ActiveModel :: AttributeError rails 3 - PullRequest
       2

ActiveModel :: AttributeError rails 3

1 голос
/ 14 ноября 2011

Я полный новичок в Rails и буду признателен за любую помощь.

В настоящее время я получаю сообщение об ошибке, когда пытаюсь выбрать отдельные источники из своей таблицы «Пользователи».Таким образом, SQL-запрос будет довольно простым.Примерно так:

select distinct source from users;

или

select source from users group by source;

проблема в том, что в моем файле ".erb" у меня есть это:

<%= f.select :source, User.find(:all, :select => "source") %>

i 'мы также попробовали это:

<%= f.select :source, User.select(:source).group(:source) %>

проблема в том, что я получаю это сообщение:

missing attribute: first_name

очевидно, я не выбираю first_name, но я заметил, что в моем "to_s "метод, который кто-то еще написал, возвращаемое значение

full_name.blank? ? email.gsub(/(.).*(.)@/,'\1..\2@').gsub(/@(.).*(.)\.([^.]+)/,'@\1..\2.\3') : full_name

где:

def full_name
  "#{self.first_name} #{self.last_name}".strip
end

так, кажется, что где-то что-то неявно вызывает" to_s "и не находитатрибут first_name.

вне изменения моего метода to_s (который широко используется в базе кода), как я могу просто выбрать список различных источников из таблицы User?

Ответы [ 2 ]

1 голос
/ 14 ноября 2011

Проблема в том, что при использовании метода select запрос будет возвращать только столбец source таблицы, а для выбора вам понадобится как минимум два параметра, что вы могли бы сделать примерно так:

<%= f.select :source, User.find(:all,:select=>"source",:group=>"source").map {|u| [u.source,u.source]} %>
1 голос
/ 14 ноября 2011

В идеале я хотел бы создать исходную модель, которая имеет пользователей, но если вам нужно быстрое решение:

class User < ActiveRecord::Base
  def self.sources
     all.group(:source).map(&:source)
  end
end

в контроллере:

@sources = User.sources

Форма:

<%= f.select :source, @sources.map{|s| [s,s]} %>

Это должно работать.

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