2012-05-30 34 views
13

Tôi đã xem xét tất cả các câu hỏi liên quan nhưng không có gì mới mẻ đối với tôi ở đây.phương thức undefined `model_name 'cho Dự án: Class

Tôi có một bộ điều khiển dự án với hành động "mới"

class ProjectsController < ApplicationController 
    def new 
    @newproject = Project.new 
    end 
end 

Dự án là một lớp đơn giản, không hoạt động kỷ lục:

class Project 
    attr_accessor :name, :description 
    def initialize 
    @name = "" 
    @description = "" 
    end 
end 

tôi nhận được lỗi "phương pháp xác định 'model_name' cho dự án : Lớp "

Đây là mẫu tệp erb:

<%= form_tag(@newproject) do |f| %> 
    <%= f.label :name %>: 
    <%= f.text_field :description %><br /> 
<% end %> 

Trả lời

29

nếu dự án không phải là một kỷ lục subclass hoạt động, bạn cần những điều này và bạn có thể sử dụng form_for

class Project 
    extend ActiveModel::Naming 
    include ActiveModel::Conversion 
    def persisted? 
    false 
    end 
    ... 
end 

xem:

<%= form_for(@newproject) do |f| %> 
    <%= f.label :name %>: 
    <%= f.text_field :description %><br /> 
<% end %> 
+0

Viktor, cảm ơn rất nhiều! Nó đã giúp đỡ tôi. Tôi chỉ bị mắc kẹt về điều này. Có lẽ, đây không phải là cách tốt nhất để tạo ra cá thể tạm thời để đưa ra, để người dùng có thể tạo ra một dự án bản ghi hoạt động thực sự. – Dmitry

+0

Thật vậy, nếu bạn đã từng tồn tại dự án, không sử dụng điều này, sử dụng lớp Dự án

+0

Cảm ơn, trợ giúp tuyệt vời @ ViktorTrón bất kỳ con trỏ làm thế nào để quen thuộc hơn với biết Rails đến mức mà bạn có thể gỡ lỗi vấn đề này? –

3
class Project < ActiveRecord::Base 
+0

Trong này trường hợp tôi nhận được "Không thể tìm thấy bảng" dự án "" – Dmitry

+0

Tôi chỉ muốn tạo một dự án tạm thời dụ để một người dùng ở phía khách hàng có thể chỉnh sửa các tham số mới để tạo ra một trường hợp dự án hợp lệ ở phía máy chủ – Dmitry

+1

oh trong trường hợp đó, chỉ sử dụng đối tượng mới của lớp ActiveRecord vẫn tồn tại trong biểu mẫu. Nó là tạm thời, vì bạn không lưu nó. Nếu lớp học của bạn không bao giờ tồn tại, hãy xem câu trả lời của tôi. –

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