2012-01-01 97 views
1

我想有一個按鈕,單擊該按鈕時,將執行Rails代碼。 JavaScript是必要的嗎?有沒有一些ruby-javascript(.js.rb)?JS按鈕來執行Rails代碼

如果按鈕被點擊...執行A 但是我不想重定向或轉到一個新的視圖,只是ruby代碼來執行。

回答

3

是。嘗試用google搜索不顯眼的javascript。具體來說,以下是一般原則(rails v 3.0或更高版本),並且最常用於表單。

下面是一個使用遠程表來發表通過javascript一個「消息」的一個例子。

首先設置你的控制器的JavaScript響應。因此,例如一個「創造」的行動將是這個樣子:

def create 
    @message = Message.new(params[:contestant]) 
    #do whatever you want 
    respond_to do |format| 
    if @contestant.save 
    format.js 
    format.html { redirect_to(@message, :notice => 'Message was successfully created.') } 
    else 
    #deal with errors here/ redirect wherever you want 
    end 

現在創建一個名爲「create.js.erb」文件。這遵循控制器操作的rails命名約定,但請注意js.erb擴展。

在這段代碼中,你可以把你要回應任何JavaScript和在軌3.1或者你可以使用默認的jQuery也是如此。

$(#messageform).html("<h3>Thanks for sending your message we will be in touch shortly</h3>"); 

然後在你的觀點,即要啓動這個JavaScript調用你乾脆把一種形式是這樣的:

<div id="messageform"> 
    <%= form_for @message, :remote => true do |f| %> 
    <h2>Send us a message</h2> 
     <p> 
     <%= f.label :email %> 
     <%= f.text_field :email %> 
     </p> 
     <p> 
     <%= f.label :message %> 
     <%= f.text_area :message %> 
     </p> 
     <p> 
     <%= f.submit "Send message!"%> 
     </p> 
    <% end %> 
</div> 

這是一個標準的form_for。只有特別注意的是:remote => true參數在開頭。

反正希望這有助於:)

+0

感謝,快速的問題,但。我在哪裏放置create.js.erb? – Vasseurth 2012-01-03 02:19:07

+0

在views文件夾爲您的控制器 – Msencenb 2012-01-03 19:37:55

+0

如果你有一個messages_controller.rb,但create.js.erb眼簾/郵件目錄 – 2014-07-08 11:57:19