提交后更新部分

时间:2014-08-23 17:04:38

标签: ruby-on-rails

在我的评论节目页面上,我正在加载一个名为'_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是正确的,这是我放置部分内容的轨道问题。

1 个答案:

答案 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