7

我有以下模型:

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

为什么我目前所拥有的东西不起作用?

4

3 回答 3

14

除了 config/routes.rb 中的正确路线外,您还需要模型上的以下两条说明:

include ActiveModel::Conversion
extend  ActiveModel::Naming

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

对于route这些答案的一部分,您可以将其添加到您的 config/routes.rb 中:

resources :contacts, only: 'create'

这将生成以下路线:

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

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

于 2013-02-13T20:09:58.457 回答
1

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

于 2019-11-07T13:16:59.353 回答
0

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

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

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

  def new
    @contact = Contact.new
  end

于 2013-02-13T19:53:31.630 回答