我如何从非持久化对象获取属性到rails中的持久化对象

时间:2014-09-03 14:31:49

标签: ruby-on-rails ruby

我有一个使用web服务的应用程序,加载一个没有持久存储在数据库中的对象(我通过JSON获取并将其转换为ruby对象)。如何将此对象的属性发送到创建表单。引用此对象的新对象通过要创建的Web服务接收。

我想单击“添加新”按钮获取属性,并将这些属性添加到要保留在数据库中的新对象的属性中。

我该怎么做?

荷。

1 个答案:

答案 0 :(得分:1)

从api接收到作为JSON的属性并将其解析为Ruby Hash之后,您可以将其放入Model.new。例如,您可以在第一页的控制器操作中执行API请求:

attrs = JSON.parse(api_response_body)
#=> {"title" => "foobar"}

@article = Article.new(attrs)
#=> #<Article title: "foobar">

我知道您希望在一个请求中获取API响应,然后使用下一个请求中获取的值将值实际持久保存到数据库中。因此,您需要跟踪请求之间的值。实现这一目标的一种简单方法是在第一页上使用带有隐藏字段的表单:

<%= form_for @article do %>
  <%= f.hidden_field :title %>
  <!-- more hidden fields here... -->

  <%= f.submit 'New Article from API Result' %>
<% end %>

然后,您可以像往常一样对资源重复使用#create操作,而不对其进行任何修改。您还可以免费获得所有验证,强大的参数等。