在我的评论节目页面上,我正在加载一个名为'_links'的部分,以及添加这样的新链接的表单。
评论/ show.html.erb
<%= render :partial => 'comments/newlink', locals: {question:question} %>
<%= render :partial => 'links/form', locals: {question:question} %>
评论/ _newlink
<% question.links.each do |link| %>
<%= link.body %>
<% end %>
表单看起来像这样。
链接/ _form.html.erb
<%= simple_form_for [question, Link.new] do |f| %>
<%= f.input :body %>
<%= f.button :submit, class: "button" %>
<% end %>
然后我有一个'link.js.erb'文件:
评论/ link.js.erb
$('.button').append('<%= j (render :partial => 'comments/newlink') %>');
我想要做的是在有人点击提交按钮后使用jquery更新_links部分,但它不是很有效。我相信jquery是正确的,这是我放置部分内容的轨道问题。
答案 0 :(得分:2)
您缺少几件事
一个。 您需要通过ajax提交表单,因此请使用remote: true option
。你的表格应该是这样的:
<%= simple_form_for [question, Link.new], remote: true do |f| %>
<%= f.input :body %>
<%= f.button :submit, class: "button" %>
<% end %>
湾 您的表单会在链接控制器中发送创建方法的请求 ,因此您的方法应如下所示:
def create
@link = Link.new(link_params)
@question = Question.find(params[:question_id])
respond_to do |format|
if @link.save
format.js # this will look for a file names create.js.erb in views/links directory
else
render "new"
end
end
℃。 在create.js.erb 中渲染部分并将当地人传递给它:
$('.button').append("<%= j (render :partial => 'comments/newlink', locals: {question: @question}) %>"); #notice using double qoutes not single
有关详细信息,请结帐Working with Javascript in Rails
<强>更新强>
<div id="link">
<%= render :partial => 'comments/newlink', locals: {question:question} %>
</div>
<div id="link-form">
<%= render :partial => 'links/form', locals: {question:question} %>
</div>
然后更新你的部分在create.js.erb
中使用这个js $('#link').html("<%= j (render :partial => 'comments/newlink', locals: {question: @question}) %>"); #notice using double qoutes not single
$('#link-form').html("<%= j (render :partial => 'links/form', locals: {question: @question}) %>"); #notice using double qoutes not single