2013-02-13 64 views
4

我有以下型号:Rails的未定义的方法“模型名称”

class Contact 
    attr_accessor :name, :emails, :message 

    def initialize(attrs = {}) 
    attrs.each do |k, v| 
     self.send "#{k}=", v 
    end 
    end 

    def persisted? 
    false 
    end 
end 

我打电话给一个接触的形式在我看来,像这样:

<div class="email_form"> 
    <%= render 'form' %> 
</div> 

这里是控制器:

class ShareController < ApplicationController 
    layout "marketing_2013" 
    respond_to :html, :js 

    def index 
    @contact = Contact.new 
    end 
end 

这里是表格:

<%= form_for(@contact) do |f| %> 
    <%= f.label :name, "Your Name" %> 
    <%= f.text_field :name %> 
    <%= f.label :text, "Send to (separate emails with a comma)" %> 
    <%= f.text_field :emails %> 
    <%= f.label :message, "Email Text" %> 
    <%= f.text_area :message %> 
    <%= f.submit %> 
<% end %> 

出于某种原因,我不断收到此错误: undefined method model_name for Contact:Class

任何原因,我有什么目前是行不通的?

+1

这已经在http://stackoverflow.com/questions/10823736/undefined-method-model-name-for-projectclass – 2013-02-13 19:50:38

回答

11

除了在你的config/routes.rb中正确的路线,你还需要这些两条指令您的型号:

include ActiveModel::Conversion 
extend ActiveModel::Naming 

看看这个问题:form_for without ActiveRecord, form action not updating

对于这些答案的route部分,你可以添加到您的config/routes.rb文件:

resources :contacts, only: 'create' 

这将产生解下列路线:

contacts POST /contacts(.:format) contacts#create 

然后你就可以使用这个action(contacts#create)来处理表单提交。

+0

回答我错过了你列出的两个说明。谢谢! – dennismonsewicz 2013-02-13 20:24:22

0

您的路线可能不会去的地方,你认为它会因此@contact可能是nill

运行“耙路线”,并检查新的路径。如果您正在使用默认设置,路线

new_contact_path ..和再培训局应在文件中:应用程序/视图/联系人/ new.html.erb

 
    def new 
    @contact = Contact.new 
    end 

相关问题