更新 3:
对于阅读本文的任何人,这就是为什么它在下面的更新 2 中没有按预期工作的原因:将局部变量传递给在视图已经加载后呈现的局部变量
如果有人知道如何解决该问题,请告诉我。
更新 2:
我用引号更新了javascript,它部分工作......从某种意义上说,javascript现在可以正常工作,只要我只有部分链接,当我点击链接时,它会导致页面上出现一串文本包含一串文本。但是,当部分包含表单字段代码时,就会出现问题。
如果我只是将以下渲染代码直接粘贴到 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 链接不会执行任何操作。
有什么想法吗?
更新代码:
谢谢回复。我进行了以下更改,但它似乎仍然无法正常工作。该链接出现在表单的底部,但单击时不会更改任何内容。我错过了什么?
路线.rb:
resources :comps
match '/new_competition', :to => "comps#new"
get "/addRoundLink" => "comps#addRoundLink", :as => :addRoundLink
注意:我包括了与“comps”相关的另外两行,以防万一它们会导致问题。
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 %>);
comps/new.html.erb:
<%= link_to "render it!", addRoundLink_path, remote: true %>
<div id="some_id"></div>
谢谢。
原始问题
首先,我是 Rails 新手。我已经阅读并尝试了许多类似问题的解决方案,但到目前为止没有任何效果。
我用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 文件中。
非常感谢帮忙。