ruby-on-rails – 通过在单击链接时呈现部分来添加部分到表单
更新3:
对于阅读此内容的任何人来说,这就是为什么它在下面的更新2中没有按预期工作的原因:Passing a local variable to a partial that is rendered after the view has already loaded 如果有人知道如何解决这个问题,请告诉我. 更新2: 我用引号更新了javascript,它部分有效…在javascript现在正常运行的意义上,当我点击链接时它会导致页面上出现一串文字,只要我只有部分包含一串文字.但是,当partial包含表单字段代码时,出现问题. 如果我只是将以下呈现代码直接粘贴到new.html.erb视图中的表单中,它会正确生成新的表单部分. <%= render "add_round",f: f %> 但是,当我尝试在comps_helper.rb中包含类似的代码然后从link_to引用它时,它不起作用: 在comps_helper.rb中: def addRound(f) render "add_round",f: f end 在new.html.erb中: <%= link_to "render it!",addRoundLink_path,remote: true %> <div id="some_id"></div> 我将addRoundLink.js.erb更改为: $("#some_id").html("<%=j addRound(f) %>"); #Is this the correct change to have made here? 在这种情况下,单击link_to链接不会执行任何操作. 有什么想法吗? 更新的代码: 谢谢回复.我做了以下更改,但似乎仍然无法正常工作.链接显示在表单的底部,但单击时不会更改任何内容.我错过了什么? routes.rb中: resources :comps match '/new_competition',:to => "comps#new" get "/addRoundLink" => "comps#addRoundLink",:as => :addRoundLink 注意:我包括与“comps”相关的其他2行,以防万一会引起问题. comps_controller.rb: def addRoundLink respond_to do |format| format.js end end comps_helper.rb: def addRound render "add_round" end addRoundLink.js.erb: $("#some_id").html(<%=j addRound %>); 谱曲/ new.html.erb: <%= link_to "render it!",remote: true %> <div id="some_id"></div> 谢谢. 原始问题 首先,我是铁杆新手.我已经阅读并尝试了许多类似问题的解决方案,但到目前为止还没有任何工作. 我用rails form_for和fields_for创建了一个表单.该表格创造了一个新的竞争(comp).比赛有很多轮.表单的上半部分(form_for部分)接受有关竞争的详细信息作为输入,表单的下半部分接受有关每轮的详细信息(fields_for部分).该表单以这种基本格式完美运行. 我获取了fields_for部分中的所有代码并将其放入部分代码中.我的计划是在表单底部创建一个“添加新轮”链接,每次按下链接时,只需在链接上方显示部分内容.这将为新一轮的表单添加一个新部分,并允许用户输入任意数量的轮次.这是我努力工作的部分. 我将此代码添加到comps_helper中: def addNewRound render "add_round" end 这将呈现文件/views/comps/_add_round.html.erb. 我的问题是:如何在单击链接时在表单中进行渲染.据我所知,我所做的研究是: <%= link_to "Add new round",{ },:remote => true %> 我不知道在{}中应该执行addNewRound方法的内容.而且我不知道我需要添加到comps_controller文件中的内容. 非常感谢帮忙. 解决方法
您必须在控制器中创建一个动作
应用程序/控制器/ some_controller.rb def hello respond_to do |format| format.js end end 并定义此操作的路由. 的routes.rb get "/hello" => "some#hello",:as => :hello 然后创建一个指向此操作的链接: <%= link_to "render it!",hello_path,remote: true %> <div id="some_id"></div> 当您单击此链接时,它将找到您的操作方式并使用js(javascript)进行响应,因为我们告诉操作仅使用js进行响应. 最后将部分渲染到视图中的任何位置(*在此示例中为* some_id div *) 应用程序/视图/一些/ hello.js.erb $("#some_id").html("<%=j addNewRound %>"); 警告:创建动态表单很痛苦.您将面临许多问题(例如为新表单元素设置不同的ID等等).我强烈建议你使用ryan bates nested_form gem (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |