2014-04-10 61 views
6

我在为ActiveResource模型创建窗体时遇到了问题,但我似乎无法找到解决方案。问题是,该模型不知道的领域,当我尝试创建一个文本字段抛出一个错误:当使用ActiveResource模型时,嵌套窗体失败,Rails 4

undefined method `firstname' for #<User:0x00000002946ec8> 

对于这种形式:

<%= form_for(@user) do |f| %> 
<div class="field"> 
    <%= f.label :firstname %><br> 
    <%= f.text_field :firstname %> 
</div> 

这是我从我的控制器:

def new 
    @user = User.new 
end 

Thie我的用户模型:

class User < ActiveResource::Base 
    self.site = "https://***.com/api/v1.0/" 
end 

我尝试了以下方法,但是ActiveResource模型不能很好地工作,它以某种方式无法再存储检索到的数据。 user.firstname是空的,当我删除它也不行......

attr_accessor :firstname, :lastname 

然后我发现宝石Fortify的(https://rubygems.org/gems/fortify),但最后一次更新是在2010年和安装它不工作...

我希望有人熟悉这个问题,并能帮助我朝正确的方向发展。

+0

你有没有看到这个线程:https://stackoverflow.com/questions/2034700/form-for-with-nested-resources 仔细检查应用程序路线。 –

+0

你能列出你的用户模型吗? –

+0

@maximus,我编辑了我的文章并添加了用户模型。在BaraaAl-Bourghli,我不认为它是相关的。 – Chris

回答

8

您应该使用.build [1]在您的控制器,而不是.new [2],如:

@user = User.build 

的原因是.new没有PARAMS只是创建一个空的对象,而.build第一查询API它应该使用,专门为这个用例(see this thread for more details

文档什么PARAMS:

  1. http://api.rubyonrails.org/v3.2.13/classes/ActiveResource/Base.html#method-c-build

  2. http://api.rubyonrails.org/v3.2.13/classes/ActiveResource/Base.html#method-c-new

+0

谢谢你的回答。但是,它会从远程API中引发500个服务器错误。你知道它期待的是什么样的回应,或者它提出了什么样的要求?我应该以某种方式准备API吗? – Chris

+0

它调用了'“https:// ***。com/api/v1.0/users/new.json',它期望一个有效的json响应和一个新用户的属性(它将从中填充它ActiveResource预计这个API是RESTful的,但是如果你的API抛出一个500,那么它可能不是 - 你应该调查是什么导致了另一端的500错误,并且如果你不确定关于它([这个答案](http://stackoverflow.com/questions/2217758/what-is-a-rest-api)是一个很好的开始。 – omnikron

+0

谢谢,我添加了新的响应json,它工作。 :) – Chris