如何使用AJAX切换数据库中的布尔列?

时间:2013-06-09 16:57:58

标签: javascript ruby-on-rails ajax remote-forms

目前正尝试通过视图中的按钮单击来切换数据库中的poll的is_live属性。这是表单和单击,它不会以参数形式发送轮询数据。

  - current_user.polls.each do |poll| 
    %tr#poll.id
      %td
        / Need to add (poll) as it needs the ID to match to the route.
        =link_to "#{poll.title}", poll_path(poll)
      %td
        =link_to "Edit", edit_poll_path(poll)
      %td
        - if poll.is_live
          = link_to "Stop"
          / , post, :method=>:toggle_live, :remote=>true, :class => 'btn btn-danger stop-poll'
        - else
          **= link_to "Start", polls_toggle_live_path(poll), :method => :post, :remote => true, :locals => poll, :class=> 'btn btn-success btn-small start-poll'**  

哪些链接指向PollsController中的此操作

  def toggle_live
    binding.pry

    @poll = Poll.find(params[:id])

    respond_to do |format|
      **format.js {@poll.toggle_live}**
    end

  end

在民意调查模型中链接到此方法 我已经在rails c中对它进行了测试,它确实将切换切换为布尔值

  def toggle_live
    if self.is_live
      self.is_live = false
    else
      self.is_live = true
    end
  end

如何使用所有这些东西来通过点击事件切换布尔值?
目前我从服务器日志中收到此错误:

Started POST "/polls/toggle_live.30" for 127.0.0.1 at 2013-06-09 12:15:02 -0400
Processing by PollsController#toggle_live as 
Completed 404 Not Found in 2447731ms

1 个答案:

答案 0 :(得分:2)

404的原因是你的方法应该放,而不是发布。一路上,我可以在模型中建议:

def toggle_live
  self.is_live = !is_live
end

在控制器中有类似的东西:

def toggle_live
  @poll = Poll.find params[:id]
  # do something to verify the user has the right to toggle this poll
  @poll.toggle_live
end

由于请求是由remote:true生成的,你知道Rails会自动呈现你的JS模板,所以respond_to是多余的。