私は編集したい名前のリストアイテムを持っています。 .editActivityボタンをクリックすると、Jqueryを使用して、うまく動作するリスト項目の名前を変更します。私はデータベース内の名前を更新するためにJqueryのAjaxを使いたいと思います。 activities_controller.rbまたはroutes.rbで問題が発生しているようですが、わかりません。Jquery Ajax Ruby on Railsを使用してデータベースを更新
<ul class="list-group-sortable" id="Activities" >
<h1 align = "center">Activities</h1>
<!-- List each activity in database -->
<% @activities.each do |activity| %>
<li class="list-group-item" id="item" style="list-style: none;">
<label class="my_label"><%= activity.a_name %></label>
<!-- Edit activity -->
<!-- link_to 'edit activity', edit_activity_path(activity) do %>-->
<button class="editActivity" style="border:none; padding:0; background-color: transparent">
<i class="fa fa-pencil fa-fw" aria-hidden="true" title="Edit" id="editActivity"></i>
</button>
<!-- end %>-->
</li> <!-- End of list item -->
<% end %> <!-- End of if statement -->
<% end %> <!-- End of activity loop -->
これは名前とAjaxを変更するための私のjQueryのです:
//Edit Activity
$('#Activities li .editActivity').click(function() {
var name = $(this).closest('li').text();
$('span').text("text is: " + name);
var input = $('<input id="attribute" class="textbox" type="text" value="' + name + '" />')
$(this).closest('li').append(input);
input.select();
input.blur(function(event) {
var text = $('input:text').val();
$(event.target).closest('li').find('label').text(text);
$('#attribute').remove(); //removes the newly created text box
//ajax request to update database
$(document).ajaxError(function(){
alert("Error with AJAX call!");
alert($(this).closest('li').attr('id'));
});
$.ajax({
method: 'PUT',
url: '/activities/' + id,
data: { a_name: text}
});
});
});
これは私のactivities_controllerの私の更新アクションです:
def update
@activity = Activity.find(params[:id])
@activity.update_attributes(:a_name)
respond_to do |format|
format.js {}
end
エンド
ティsが私のroutes.rbをしている:
$.ajax({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
},
method: 'PUT',
url: '/activities/' + id,
data: { a_name: text }
});
をそして、あなたはまた、レンダリングするためにあなたのupdate
アクションのupdate.js.erb
ファイルを作成する必要があります。
put '/activities/:id' => 'activities#update'
'update.js.erb'ファイルには、' ajax'呼び出しが成功した後にレンダリングされるjavascriptコンテンツが含まれています(javascriptの場合は 'update.html.erb'と同じです)。内容は、あなたの 'ajax'が実行された後に何をしたいかによって決まります。 – Gerry