2013-02-28 61 views
1

我正在創建可嵌入的部件,類似Facebook的按鈕。Like按鈕模擬(在Ruby on Rails中可嵌入的部件)

我有兩個模型:widget和widget_like。

我的數據庫

在部件表有網站安裝了我「喜歡」按鈕。

在widget_like表中有網站的喜歡。

WidgetsController

def show 
    @widget = Widget.find(params[:id]) 
    @like = WidgetLike.new 
    end 

WidgetLikesController

def create 
    @widget = Widget.find(params[:widget_id]) 
    @like = @widget.widget_likes.build(params[:widget_like]) 
    if @like.save 
     respond_to do |format| 
     format.html 
     format.js 
     end 
    end 
    end 

窗口小部件/ show.js.erb

document.write("<%= escape_javascript(render(:partial => "embed").html_safe) %>"); 

部件/ embed.html.erb

<%= form_for ([@widget, @like]), :remote => true do |f| %> 
    <%= f.submit "widget" %> 
<% end %> 

問題是,我需要我的完整網址在我的形式作用。如何補充一點,是否安全?

+0

你是什麼意思「我的形式的行動完整的網址」?你的意思是你需要從當前頁面的按鈕位置的網址? – 2013-02-28 19:12:39

+0

我的意思是像

因爲這個表單會從不同的網站來我 – Bennington 2013-03-01 06:03:53

+0

用更簡單的解決方案更新了我的答案。 +我只想到它:使用'remote:true'將無法正常工作,除非在窗體中包含rails_ujs腳本,這似乎有點矯枉過正。 – 2013-03-05 12:32:05

回答

1

使用url選項form_for

form_for [@widget, @like], remote: true, url: { host: "http://somewebsite.com" } 

它的工作原理完全一樣url_for,並且應該合併,你與form_for提供的默認提供的選項。

UPDATE

現在我想起來了

,還有更簡單:

form_for [@widget, @like], remote: true, url: { only_path: false } 

這將讓你一個完整的URL當前主機。該解決方案將更易於維護。