【问题标题】:Can't get AJAX form partial working on Rails 3.2无法在 Rails 3.2 上获得 AJAX 形式的部分工作
【发布时间】:2012-11-07 23:30:32
【问题描述】:

我正在尝试使用 AJAX 呈现表单。非 ajax 版本可以正常工作,但 ajaxified 版本不能。它的链接在 index.html.erb 中。 Webrick 服务器显示:

2012-11-19 17:19:27 -0500 开始 GET "/categories/3/new_sub" 获取 127.0.0.1
CategoriesController#new_sub 作为 JS 处理
参数:{"id"=>"3"}
类别负载 (0.1ms) SELECT "categories".* FROM "categories" WHERE "categories"."id" = ?限制 1 [["id", "3"]]
渲染类别/_form.html.erb (1.8ms)
渲染类别/new_sub.js.erb (3.6ms)
在 8 毫秒内完成 200 次 OK(查看次数:6.3 毫秒 | ActiveRecord:0.1 毫秒)

这是我的类别控制器:

# GET /categories
# GET /categories.json
def index
  @categories = Category.roots

  respond_to do |format|
    format.html # index.html.erb
    format.json { render json: @categories }
  end
end

# GET /categories/1/new_sub.html
# GET /categories/1/new_sub.js
def new_sub
  @parent = Category.find(params[:id])
  @category = Category.new

  respond_to do |format|
    format.html
    format.js
  end
end

index.html.erb:

<h1>Listing categories</h1>

<%= recurse_categories(@categories) %>

<br />

<%= link_to 'New Category', new_category_path %>

recurse_categories 助手:

def recurse_categories(cats)
  s = "<ul>"
  cats.each do |cat|
    s << "<li id=\"#{cat.id}\">#{link_to cat.name, new_sub_category_path(cat), remote: true}</li>"
    if cat.has_children?
      s << recurse_categories(cat.children)
    end
  end
  s << "</ul>"
  s.html_safe
end

new_sub.js.erb:

$('ul').after(<%= render partial: "form", locals: { parent: @parent, category: @category } %>);

_form.html.erb:

<%= form_for(category) do |f| %>

  <div class="field">
    <%= f.text_field :name  %>
    <%= f.hidden_field :ancestry, value: "#{parent.ancestry + '/' + parent.id.to_s}" %>
    <%= f.submit "Create subcategory" %>
  </div>

<% end %>

【问题讨论】:

  • 不起作用是什么意思?

标签: ruby-on-rails ajax ruby-on-rails-3 forms


【解决方案1】:

修好了!我只是忘记了 jquery 选择器和参数周围的引号,DUH!

【讨论】:

    【解决方案2】:

    您的“ul”标签在类别错误的条件块下。您确定要将您的回复附加到“error_explanation” div 中吗?

    你可以有一个 span 标签并在 new_sub.js.erb 中使用它

    <div class="field">
    
     <span id="subcat"/>     
    
    <%= f.text_field :name  %>
    <%= f.hidden_field :ancestry, value: "#{parent.ancestry + '/' + parent.id.to_s}" %>
    <%= f.submit "Create subcategory" %>
    

    【讨论】:

    • 但错误解释 div 甚至不存在,因为没有错误。该 ul 仅显示保存对象时是否存在验证错误。我还没有保存任何东西,我什至无法呈现表单。在这种情况下, ul 甚至不存在,因为不满足 if 条件。
    猜你喜欢
    • 2011-02-14
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多