Как добраться до GeneratedAttribute в генераторе нестандартного контроллера? - PullRequest
3 голосов
/ 09 июня 2011

Я создаю собственный генератор контроллера, который наследуется от Rails :: Generators :: NamedBase, который создает контроллер и представления с заданным именем модели (например, Person).Я также хочу создать партиал _form.html.haml, который строит форму на основе атрибутов модели (я использую simple_form btw).

То, что у меня пока есть:

<% attributes = file_name.capitalize.constantize.columns.map { |c| [Rails::Generator::GeneratedAttribute.new(c.name, c.type)]} %>
- simple_form_for [:admin,@<%=file_name%>] do |f|
  = render 'shared/error_summary', :object => f.object
  .inputs
  <%- attributes.each do |attribute| -%>
    = f.<%= attribute.reference? ? :association : :input %> :<%= attribute.name %>
  <%- end -%>  
  .actions
    = f.button :submit

Я получаю исключение "неинициализированная константа Rails :: Generator (NameError)".Не уверен, что мне нужно, или если мой подход, приведенный выше, даже правильный.

Любая помощь будет потрясающей.

Спасибо -wg

1 Ответ

4 голосов
/ 19 июня 2011

Я подозреваю, что проблема в том, что вам не хватает s после генератора. Правильный вызов метода:

Rails::Generators::GeneratedAttribute.new

Вместо того чтобы создавать переменную атрибутов внутри шаблона, лучше создать ее внутри класса генератора в методе initialize. Этот метод выглядит как скелет:

  def initialize(*args, &block)
    super

    # Call Rails::Generators::GeneratedAttribute.new here

  end

Если вы заставляете своего пользователя передавать нужные атрибуты в форме column_name: column_type, тогда вы можете сделать следующее:

class FooGenerator < Rails::Generators::NamedBase
  argument :model_attributes, type: :array, default: [], banner: "model:attributes"

  def initialize(*args, &block)
    super

    @attributes = []

    model_attributes.each do |attribute|
      @attributes << Rails::Generators::GeneratedAttribute.new(*attribute.split(":")) if attribute.include?(":")
    end
  end
end

Возможно, вы захотите также учесть возможность того, что никакие атрибуты не будут каким-либо образом переданы. Однако это будет зависеть от ваших потребностей, поэтому я не могу наставить вас в этом без дополнительной информации. Извините!

Хороший стандарт для подражания - источник nifty_generators .

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