繁体   English   中英

Rails渲染带有表单对象的部分对象

[英]Rails Rendering partial with form object

我想从下拉列表中选择:color后呈现部分'colordata',因为它涉及到Ajax。 我看不到主页的任何变化。 偶数形式在colordata部分中未定义。

这是我的模型订购模式

create_table "orders", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
    t.string "design"
    t.integer "quantity"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.string "color"
    t.string "lotnumber"
    t.float "consumption", limit: 24
    t.string "number"
  end

这是ajax电话

  $("select[name='order[color]']").change(function(){
     $.ajax({
       url: "colordata",
       type: "post",
       data:{
         "color": $(this).val()
       },
       dataType: JSON,
       success: function(data){
       }
     });
   });

这是控制器。

def colordata
    request.POST.each do |key, value|
      @color = value
    end
    @lotdetail= Master::Yarn.where('color like?', @color)
    respond_to do |format|
      format.js
    end
  end

这是Colordata.js.erb

$(".lot").innerHTML += "<%= escape_javascript(render(partial: 'colordata'),locals: {form: form) %>"

这是部分_colordata.html.erb

<%= form.label :lotnumber %>
<%= form.collection_select(:lotnumber, @lotdetail, @lotdetail.lotnumber,@lotdetail.lotnumber,prompt: "Select the Yarn")%>

错误是

  1. 表单未在_colordata.html.erb中定义
  2. 部分课程没有追加。

提前致谢。

要用jquery追加部分,可以改用append方法。 locals应在渲染器内定义。 因此,您可以像这样进行修复:

$(".lot").append("<%= escape_javascript(render(partial: 'colordata', locals: { form: form })) %>")

Rails 5 呈现部分表单时出错:“未定义的方法 `simple_fields_for' for ”# <simpleform::formbuilder "< div><div id="text_translate"><p> 这是从这里的延续: <a href="https://stackoverflow.com/questions/58584478/passing-a-form-as-a-local-to-a-ajax-rendered-partial-in-rails-5/58587570?noredirect=1#comment103491300_58587570" rel="nofollow noreferrer">将表单作为本地传递给 ajax 在 Rails 5 中呈现部分</a></p><p>我已经翻遍了,找不到有效的解决方案。</p><p> 相关 Controller (profits_controller.rb):</p><pre> def new_tabs @market = Market.order('mjsnumber').all.first @profit = Profit.new profit_types_markets_products end def fetch_market @market = Market.where(:id =&gt; params[:market_id]).first @form = params["form"] respond_to do |format| format.js { render layout: false} end end</pre><p> 相关视图(new_tabs.html.erb):</p><pre> &lt;%= simple_form_for @profit, :remote =&gt; true do |form| %&gt; &lt;% @markets.each_with_index do |market, i| %&gt; &lt;%= link_to market.nick, fetch_market_path(:market_id =&gt; market.id, :form =&gt; form, profit: @profit), :remote=&gt;'true', :id =&gt; 'navBtn' + market.id.to_s, :class =&gt; 'd-flex flex-grow-1 align-content-center text-center nav-item nav-link ' + active(i).to_s + profit_nav_font_color(market.color).to_s, "data-toggle" =&gt; "pill", "roll" =&gt; "tab", "style" =&gt; "background-color: " + market.color.to_s + ";", remote: true %&gt; &lt;% end %&gt; &lt;%= render:partial =&gt; 'edit_partial_form', locals: { market: @market, form: form, profit: @profit } %&gt;</pre><p> 相关部分(_edit_partial_form.html.erb):</p><pre> &lt;%= market.namae %&gt; &lt;%= form.simple_fields_for:figures, :defaults =&gt; {:input_html =&gt; {:class =&gt; "floatTextBox" }}, remote: true do |figures_form| %&gt; &lt;%= figures_form.input "[test]" %&gt; &lt;% end %&gt;</pre><p> 相关JS(fetch_market.js.erb):</p><pre> $("#edit_partial_form").html("&lt;%= escape_javascript(render partial: 'edit_partial_form', locals: { market: @market, form: @form, profit: @profit } ) %&gt;");</pre><p> 路线:</p><pre> resources:profits do resources:markets resources:products collection do get 'new_by_product_type' get 'new_tabs' end end get "/fetch_market" =&gt; 'profits#fetch_market', as: 'fetch_market' patch 'profits/:id/autosave', as: :autosave_profit, to: 'profits#autosave'</pre><p> 它呈现部分罚款,并且链接似乎包含 FormBuilder 信息。 当我单击链接并向 controller 添加“放置参数”时,它会在那里显示参数。 但是在控制台中加载部分时给我一个错误:</p><pre> ActionView::Template::Error (undefined local variable or method `form' for #&lt;#&lt;Class:0x00007fdbd6453648&gt;:0x00007fdbd68db5f8&gt; Did you mean? fork): 1: $("#edit_partial_form").html("&lt;%= escape_javascript(render partial: 'edit_partial_form', locals: { market: @market, form: form, profit: @profit } ) %&gt;");</pre><p> 当我单击生成市场列表中第二个市场的链接时,本地环境出现完全错误:</p><pre> Processing by ProfitsController#fetch_market as JS Parameters: {"form"=&gt;"#&lt;SimpleForm::FormBuilder:0x00007fed50dba9f8&gt;", "market_id"=&gt;"2"} User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]] ↳ /home/mudl/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98 Market Load (0.3ms) SELECT "markets".* FROM "markets" WHERE "markets"."id" = $1 ORDER BY "markets"."id" ASC LIMIT $2 [["id", 2], ["LIMIT", 1]] ↳ app/controllers/profits_controller.rb:75 Rendering profits/fetch_market.js.erb Rendered profits/_edit_partial_form.html.erb (6.5ms) Rendered profits/fetch_market.js.erb (7.5ms) Completed 500 Internal Server Error in 12ms (ActiveRecord: 0.6ms) ActionView::Template::Error (undefined method `simple_fields_for' for "#&lt;SimpleForm::FormBuilder:0x00007fed50dba9f8&gt;":String): 11: MJS 番後: &lt;%= market.mjsnumber %&gt; 12: &lt;/span&gt; 13: &lt;/div&gt; 14: &lt;%= form.simple_fields_for:figures, :defaults =&gt; {:input_html =&gt; {:class =&gt; "floatTextBox" }}, remote: true do |figures_form| %&gt; 15: &lt;%= figures_form.input "[test]" %&gt; 16: &lt;% end %&gt; 17: app/views/profits/_edit_partial_form.html.erb:14:in `_app_views_profits__edit_partial_form_html_erb__249336059151108365_70328546926840' app/views/profits/fetch_market.js.erb:1:in `_app_views_profits_fetch_market_js_erb___2023159631102932010_70328546933900' app/controllers/profits_controller.rb:78:in `block (2 levels) in fetch_market' app/controllers/profits_controller.rb:77:in `fetch_market' (undefined method `simple_fields_for' for "#&lt;SimpleForm::FormBuilder</pre><p> 我正在删除 simple_form 标记,因为在将 simple_form 更改为常规形式的简单测试之后,无论我在部分中调用 field_for 之后的任何方法,错误都会持续存在。</p><p> 提前致谢。</p><p> 编辑:</p><p> 所以我最终放弃了,只使用@profit 变量在部分中创建一个新形式(不理想,但我会破解它)。 不过,仍然很好奇这是否可能,所以我将把这个问题留着。</p></div></simpleform::formbuilder>

[英]Error in Rails 5 rendering form in partial: “ undefined method `simple_fields_for' for ”#<SimpleForm::FormBuilder "

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 RJ中的UJS部分渲染3 在导轨模态中渲染部分 通过表单保存模型后重新渲染Rails部分 在AJAX调用后在rails中渲染局部时的未定义形式变量 Ajax表单未呈现部分 Rails 4-使用AJAX / JS进行部分渲染 Rails 5 呈现部分表单时出错:“未定义的方法 `simple_fields_for' for ”# <simpleform::formbuilder "< div><div id="text_translate"><p> 这是从这里的延续: <a href="https://stackoverflow.com/questions/58584478/passing-a-form-as-a-local-to-a-ajax-rendered-partial-in-rails-5/58587570?noredirect=1#comment103491300_58587570" rel="nofollow noreferrer">将表单作为本地传递给 ajax 在 Rails 5 中呈现部分</a></p><p>我已经翻遍了,找不到有效的解决方案。</p><p> 相关 Controller (profits_controller.rb):</p><pre> def new_tabs @market = Market.order('mjsnumber').all.first @profit = Profit.new profit_types_markets_products end def fetch_market @market = Market.where(:id =&gt; params[:market_id]).first @form = params["form"] respond_to do |format| format.js { render layout: false} end end</pre><p> 相关视图(new_tabs.html.erb):</p><pre> &lt;%= simple_form_for @profit, :remote =&gt; true do |form| %&gt; &lt;% @markets.each_with_index do |market, i| %&gt; &lt;%= link_to market.nick, fetch_market_path(:market_id =&gt; market.id, :form =&gt; form, profit: @profit), :remote=&gt;'true', :id =&gt; 'navBtn' + market.id.to_s, :class =&gt; 'd-flex flex-grow-1 align-content-center text-center nav-item nav-link ' + active(i).to_s + profit_nav_font_color(market.color).to_s, "data-toggle" =&gt; "pill", "roll" =&gt; "tab", "style" =&gt; "background-color: " + market.color.to_s + ";", remote: true %&gt; &lt;% end %&gt; &lt;%= render:partial =&gt; 'edit_partial_form', locals: { market: @market, form: form, profit: @profit } %&gt;</pre><p> 相关部分(_edit_partial_form.html.erb):</p><pre> &lt;%= market.namae %&gt; &lt;%= form.simple_fields_for:figures, :defaults =&gt; {:input_html =&gt; {:class =&gt; "floatTextBox" }}, remote: true do |figures_form| %&gt; &lt;%= figures_form.input "[test]" %&gt; &lt;% end %&gt;</pre><p> 相关JS(fetch_market.js.erb):</p><pre> $("#edit_partial_form").html("&lt;%= escape_javascript(render partial: 'edit_partial_form', locals: { market: @market, form: @form, profit: @profit } ) %&gt;");</pre><p> 路线:</p><pre> resources:profits do resources:markets resources:products collection do get 'new_by_product_type' get 'new_tabs' end end get "/fetch_market" =&gt; 'profits#fetch_market', as: 'fetch_market' patch 'profits/:id/autosave', as: :autosave_profit, to: 'profits#autosave'</pre><p> 它呈现部分罚款,并且链接似乎包含 FormBuilder 信息。 当我单击链接并向 controller 添加“放置参数”时,它会在那里显示参数。 但是在控制台中加载部分时给我一个错误:</p><pre> ActionView::Template::Error (undefined local variable or method `form' for #&lt;#&lt;Class:0x00007fdbd6453648&gt;:0x00007fdbd68db5f8&gt; Did you mean? fork): 1: $("#edit_partial_form").html("&lt;%= escape_javascript(render partial: 'edit_partial_form', locals: { market: @market, form: form, profit: @profit } ) %&gt;");</pre><p> 当我单击生成市场列表中第二个市场的链接时,本地环境出现完全错误:</p><pre> Processing by ProfitsController#fetch_market as JS Parameters: {"form"=&gt;"#&lt;SimpleForm::FormBuilder:0x00007fed50dba9f8&gt;", "market_id"=&gt;"2"} User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2 [["id", 1], ["LIMIT", 1]] ↳ /home/mudl/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98 Market Load (0.3ms) SELECT "markets".* FROM "markets" WHERE "markets"."id" = $1 ORDER BY "markets"."id" ASC LIMIT $2 [["id", 2], ["LIMIT", 1]] ↳ app/controllers/profits_controller.rb:75 Rendering profits/fetch_market.js.erb Rendered profits/_edit_partial_form.html.erb (6.5ms) Rendered profits/fetch_market.js.erb (7.5ms) Completed 500 Internal Server Error in 12ms (ActiveRecord: 0.6ms) ActionView::Template::Error (undefined method `simple_fields_for' for "#&lt;SimpleForm::FormBuilder:0x00007fed50dba9f8&gt;":String): 11: MJS 番後: &lt;%= market.mjsnumber %&gt; 12: &lt;/span&gt; 13: &lt;/div&gt; 14: &lt;%= form.simple_fields_for:figures, :defaults =&gt; {:input_html =&gt; {:class =&gt; "floatTextBox" }}, remote: true do |figures_form| %&gt; 15: &lt;%= figures_form.input "[test]" %&gt; 16: &lt;% end %&gt; 17: app/views/profits/_edit_partial_form.html.erb:14:in `_app_views_profits__edit_partial_form_html_erb__249336059151108365_70328546926840' app/views/profits/fetch_market.js.erb:1:in `_app_views_profits_fetch_market_js_erb___2023159631102932010_70328546933900' app/controllers/profits_controller.rb:78:in `block (2 levels) in fetch_market' app/controllers/profits_controller.rb:77:in `fetch_market' (undefined method `simple_fields_for' for "#&lt;SimpleForm::FormBuilder</pre><p> 我正在删除 simple_form 标记,因为在将 simple_form 更改为常规形式的简单测试之后,无论我在部分中调用 field_for 之后的任何方法,错误都会持续存在。</p><p> 提前致谢。</p><p> 编辑:</p><p> 所以我最终放弃了,只使用@profit 变量在部分中创建一个新形式(不理想,但我会破解它)。 不过,仍然很好奇这是否可能,所以我将把这个问题留着。</p></div></simpleform::formbuilder> 渲染部分Rails后Javascript无法正常工作 在bootstrap popover rails 5 app中渲染部分? 在Rails 3中渲染局部时调用javascript
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM