通常最好的方法是通过表格。考虑为所有 @my_ip 属性创建一个包含隐藏字段的表单。
<%= form_tag activate_apis_path do %>
<%= hidden_field_tag "my_ip_instance[foo]", @my_ip.foo %>
<%= hidden_field_tag "my_ip_instance[tomato]", @my_ip.tomato %>
<%= submit_tag "Activate", class: "btn btn-primary btn-xs" %>
<% end %>
(额外的功劳:您还可以遍历@my_ip 的属性来生成隐藏字段。)
另一种方法是将@my_ip序列化为JSON,然后在控制器中反序列化。不过我认为这要麻烦得多。
link_to "activate", activate_apis_path(my_ip_instance: @my_ip.to_json)
要使这项工作适用于更复杂的对象,您需要将自己的序列化器/反序列化器逻辑写入类中,如this post 中所述。
require "json"
class A
def initialize(string, number)
@string = string
@number = number
end
def to_json(*a)
{
"json_class" => self.class.name,
"data" => {"string" => @string, "number" => @number }
}.to_json(*a)
end
def self.json_create(o)
new(o["data"]["string"], o["data"]["number"])
end
end