3

勾选复选框时,我只想更新数据库中的“需要”值。脚本如下

 $('td div').find('input[type=checkbox]').click(function(){
 $.ajax({
          type: "PUT",
          dataType: "script",
          url: '/ecs/2',
          contentType: 'application/json',
          data: JSON.stringify({ ecs:{needed:'N'}, _method:'put' })
          }).done(function( msg )
          {
          alert( "Data Saved: " + msg );
          });
});

}); 并且控制器的代码是标准的。

# PATCH/PUT /ecs/1
  # PATCH/PUT /ecs/1.json
  def update
    respond_to do |format|
      if @ec.update(ec_params)
        format.html { redirect_to @ec, notice: 'Ec was successfully updated.' }
        format.json { head :no_content }
        format.js
      else
        format.html { render action: 'edit' }
        format.json { render json: @ec.errors, status: :unprocessable_entity }
        format.js
      end
    end
  end

EC 是模块的名称,需要的是列的名称。我只想用 id=2 更新 ec 所需的新值。但是现在,我总是遇到 BAD REQUEST。我不确定问题出在哪里。

4

1 回答 1

0

对于您的复选框(使其不引人注目,这只是一个简单的示例):

... onclick="$.post('/url', {omg_it_is_checked: $(this).attr('checked')})"

routes.rb

post '/url' => 'my_controller#my_action'

在控制器中:

def my_action
   #....
   @var = some.actions.here.with(params[:omg_it_is_checked]) #or update what you need 
   respond_to do |format|
     format.js{render layout: false}
   end
end

比你必须有一个适当的观点my_action.js.erb,像这样:

$('#my_uniq_dom_id').html('<%= j render partial: 'new_piece_of_html' %>') #you can render nothing or flash something

最后我们需要的是_new_piece_of_html.html.erb

<div id="new_ajaxed_content"><%= @var %></div> <!-- or you can render checked checkbox, even with animation, or error message if in some reason it was not saved -->

瞧!在控制器操作后div#my_uniq_dom_id更新div#new_ajaxed_content


完全不同的方法- 使用这个宝石。这是简单需求的简单解决方案

干杯!

于 2013-07-25T10:23:58.637 回答