пример ruby, rails, railscasts я испортил - PullRequest
0 голосов
/ 10 апреля 2010

Если вы видели railscasts на вложенных формах, это вспомогательный метод для динамического создания ссылок. Тем не менее, после того, как я обновился до ruby ​​1.9.2 и rails 3, это не сработало, и теперь я понимаю, почему.

    def link_to_add_fields(name, f, association)
  new_object = f.object.class.reflect_on_association(association).klass.new
  fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
    render(association.to_s.singularize + "_fields", :f => builder)
  end
  link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))
end

вот код JavaScript

 function add_fields(link, association, content) {
 var new_id = new Date().getTime();
 var regexp = new RegExp("new_" + association, "g")
 $(link).up().insert({
  before: content.replace(regexp, new_id)
 });

}

Когда я просматриваю исходный код, ссылка отображается так:

<p><a href="#" onclick="add_fields(this, &quot;dimensions&quot;, &quot;&quot;); return false;">Add Dimension</a></p>

, поэтому &quot;&quot; не является правильной информацией для создания нового шаблона, и что-то происходит с тем, как устанавливается строка для полей. такие как fields= f.fields_for

Ответы [ 4 ]

5 голосов
/ 10 апреля 2010

Похоже, f.fields_for больше не возвращает строку отображаемых полей. Я предполагаю, что это побочный эффект от изменения блоков ERB *1003*, в этом случае он будет применяться только к Rails 3 Beta 2. Я считаю это ошибкой, и, надеюсь, это будет исправлено до окончательного выпуска, но сейчас вы можете сделать быстрое исправление, как это:

def link_to_add_fields(name, f, association)
  new_object = f.object.class.reflect_on_association(association).klass.new
  fields = fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
    safe_concat(render(association.to_s.singularize + "_fields", :f => builder))
  end
  link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))
end
1 голос
/ 02 декабря 2010

Я тоже внедряю вложенные формы Райана в приложение Rails 3 (Ruby 1.9.2), но столкнулся со следующей ошибкой:

undefined method `klass' for nil:NilClass

в терминах строки 2 следующего вспомогательного метода:

def link_to_add_fields(name, f, association)
    new_object = f.object.class.reflect_on_association(association).klass.new
    fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder|
        safe_concat(render(association.to_s.singularize + "_fields", :f => builder))
    end
    link_to_function(name, ("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))
end

Кто-нибудь знает, что может быть причиной этого?

Я подумал, что, возможно, это связано с версией ruby, которую я использовал (т.е. я изначально использовал REE, но теперь переключился на 1.9.2), но я все еще получаю ту же проблему.

Большое спасибо за любую помощь!

0 голосов
/ 26 сентября 2011

В Rails 3.0.9 вы можете исправить это, заменив этот код

link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")"))

через это

link_to_function(name, "add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")

0 голосов
/ 10 апреля 2010

Если вы чувствуете, что это связано с обновлением до rails ver 3, выполните gem list. Если у вас установлены более старые версии rails, введите:

RAILS_GEM_VERSION = '(Your older rails version here)' unless defined? RAILS_GEM_VERSION

в файле environment.rb в вашей папке конфигурации. Также хорошо заморозить версию вашего рельса для вашего приложения.

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