基本的に、アイテムが関連付けられたリストを作成するアプリがあります。アクセスした任意の Web サイトからアイテムを作成するブックマークレットを使用してクロスドメイン投稿を受け入れるようにアプリを有効にしようとしています。私はレールとjQueryの両方に慣れていないので、どんな助けでも大歓迎です!
今のところ、ブックマークを初めて押したときに 200 OK が返ってきます。2 回目は、304 エラーが表示されます。ただし、アイテムは作成されません。
items_controller.rb
def create
@list = current_user.lists.find(params[:list_id])
@item = Item.create!(params[:item])
@item.wishes.build(list_id: @list.id)
if @item.save
flash[:success] = "Item created!"
redirect_to @item
else
render 'new'
end
end
ブックマークレット.js
alert('Loaded');
document.write('<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>');
(function($)
{
alert( $('title').text() );
var dataObj = {
'remote_image_url': "http://developer.android.com/assets/images/dac_logo.png",
'title': $('title').text(),
'link': "http://omfg.dk",
'list_id': 5,
'commit': "Add wish"
};
$.ajaxSetup({
type: "POST",
// contentType: "application/json; charset=utf-8",
xhrFields: {
withCredentials: true
},
crossDomain: true
});
$.post('http://localhost:3000/items', dataObj, function(data)
{
//alert('ADDED!!!');
});
}(jQuery));
ブックマーク
javascript:(function()%7Bvar%20script=document.createElement('SCRIPT');script.src='http://localhost:3000/assets/bookmarklet.js';document.body.appendChild(script);%7D)()
さらに、rack/cors
gem をインストールして、次のようにセットアップしました。
config.middleware.use Rack::Cors do
allow do
origins '*'
resource '*',
:headers => :any,
:methods => [:get, :put, :delete]
end
end