Rails未定义方法'model_name'

时间:2013-02-13 19:44:59

标签: ruby-on-rails-3 activemodel

我有以下型号:

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

我目前所拥有的任何理由都不起作用?

3 个答案:

答案 0 :(得分: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

然后您可以使用此操作(联系人#create)来处理表单提交。

答案 1 :(得分:0)

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

运行“rake routes”并检查新路径..如果使用默认值,则路径为

new_contact_path ..并且erb应该在文件中:app / views / contacts / new.html.erb

  def new
    @contact = Contact.new
  end

答案 2 :(得分:0)

include ActiveModel::Model添加到您的联系人文件中