2014-04-10 19 views
6

Tôi gặp sự cố khi tạo biểu mẫu cho các mô hình ActiveResource nhưng dường như tôi không tìm được giải pháp. Vấn đề là mô hình không biết các lĩnh vực, và ném một lỗi khi tôi cố gắng để tạo ra một trường văn bản:Các biểu mẫu lồng nhau không thành công khi sử dụng mô hình ActiveResource, Rails 4

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

Đối với hình thức này:

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

Đây là của tôi từ bộ điều khiển của tôi:

def new 
    @user = User.new 
end 

Thie là mô hình người dùng của tôi:

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

Tôi đã thử những điều sau, nhưng điều đó không hoạt động tốt với các mô hình ActiveResource, bằng cách nào đó nó không thể lưu trữ dữ liệu đã truy xuất nữa. user.firstname là trống rỗng, khi tôi loại bỏ các dòng nó không phải là ...

attr_accessor :firstname, :lastname 

Sau đó, tôi tìm thấy viên ngọc Fortify (https://rubygems.org/gems/fortify) nhưng bản cập nhật cuối cùng là vào năm 2010 và cài đặt nó không hoạt động ...

Tôi hy vọng một người nào đó quen thuộc với vấn đề này và có thể giúp tôi đi đúng hướng.

+0

Bạn đã thấy chủ đề này: https://stackoverflow.com/questions/2034700/form-for-with-nested-resources Kiểm tra các ứng dụng tuyến đường. –

+0

bạn có thể liệt kê Mô hình người dùng của mình không? –

+0

@maximus, tôi đã chỉnh sửa bài đăng của mình và thêm mô hình người dùng. Tại BaraaAl-Bourghli, tôi không nghĩ nó có liên quan. – Chris

Trả lời

8

Bạn nên sử dụng .build [1] trong điều khiển của bạn thay vì .new [2], như:

@user = User.build 

Lý do là .new không có params chỉ tạo ra một đối tượng rỗng, trong khi .build truy vấn đầu tiên api cho những gì params nó nên được sử dụng, đặc biệt cho usecase này (see this thread for more details)

Documents:

  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

Cảm ơn bạn đã trả lời. Tuy nhiên, nó ném một lỗi máy chủ 500 từ API từ xa. Bạn có biết phản ứng mong đợi hay loại yêu cầu gì không? Tôi có nên chuẩn bị API theo cách không? – Chris

+0

Nó thực hiện cuộc gọi đến '" https: // ***. Com/api/v1.0/users/new.json' và nó mong đợi một phản hồi json hợp lệ với các thuộc tính của một người dùng mới (từ đó nó sẽ cư trú ActiveResource hy vọng API sẽ được RESTful, nhưng nếu API của bạn đang ném 500 thì có lẽ nó không phải là - bạn nên điều tra những gì gây ra lỗi 500 ở đầu bên kia và đọc trên REST nếu bạn không chắc chắn về nó ([câu trả lời này] (http://stackoverflow.com/questions/2217758/what-is-a-rest-api) là một nơi tốt để bắt đầu. – omnikron

+0

Cảm ơn, tôi đã thêm phản hồi vào json mới và nó hoạt động. :) – Chris

Các vấn đề liên quan