提交按钮调用方法

时间:2013-09-25 19:02:26

标签: ruby-on-rails ruby button methods ruby-on-rails-4

我是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&amp;在helper.rb中(因为我不确定它将调用该方法的位置)我做了一个简单的方法:

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

但我完全迷失了。有人可以帮帮我吗如果你具体的话会很棒!

2 个答案:

答案 0 :(得分:1)

如果您已经提交了表单,并且想要设置该参数,请在控制器中执行此操作:

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)

由于您提到您不确定如何利用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