2013-09-25 125 views
0

我是新來的Ruby on Rails和我試圖更新設備屬性(用LastChangedBy)只要單擊提交按鈕,將其值設置爲用戶的IP地址。我想做類似的事情:提交按鈕調用一個方法

<%= form_for(@device) do |f| %> 
. 
. 
. 
<%= if click? (f.submit "Commit Entries", class: "btn btn-primary") == true %>  
     <%= @device.lastChangedBy = request.remote_ip %> 
<% end %> 

但我不認爲這是可能的。我在找到使用「button_to」,但在網上搜索後,我感到非常困惑如何使用它。我試圖做類似:

<%= button_to "Commit Entries", action: "setIp" %> 

,然後在DevicesController &在helper.rb(因爲我不知道在哪裏它會調用該方法),我做了一個簡單的方法:

def setIp 
     Device.find(params[:id]) 
    @device.lastChangedBy = request.remote_ip 
end 

但我完全失去了。有人能幫助我嗎?如果你是特定的,這將是驚人的!根據您的應用

class DevicesController < ApplicationController 

    def update 
    @device = Device.find(params[:id]) 
    @device.last_changed_by = request.remote_ip # Tada! 
    if @device.update_attributes(params[:device]) 
     redirect_to @device 
    else 
     render 'edit' 
    end 
    end 

end 

調整,但是這是基本的想法:

回答

1

如果您已經提交表單,並要設置該參數,做到在控制器中。

+0

這正是我所需要的!非常感謝! –

0

既然你提到,你不知道如何利用呼叫與button_to一個功能,那你已經在你的控制器有一個方法可以按如下方式,通過添加一些字段,以您的觀點的button_to接近它。使用這種方法,您還可以刪除表單。

=button_to 'SetIp', {:controller => "your_controller", 
    :action => "setIp", :id => your_model.id}, {:method => :post } 

而在你的routes.rb

resources :your_controller do  
    post :setIp, :on => :collection  
end 

而且在your_controller.rb

def setIp 
    device = Device.find(params[:id]) 
    device.lastChangedBy = request.remote_ip 
    device.save! 

    #Can redirect to anywhere or render any page 
    redirect_to action: :index 
end