Rails未定义方法'model_name'

den*_*icz 4 activemodel ruby-on-rails-3

我有以下型号:

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
Run Code Online (Sandbox Code Playgroud)

我在我的视图中呼吁联系表格如下:

<div class="email_form">
   <%= render 'form' %>
</div>
Run Code Online (Sandbox Code Playgroud)

这是控制器:

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

  def index
    @contact = Contact.new
  end
end
Run Code Online (Sandbox Code Playgroud)

这是表格:

<%= 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 %>
Run Code Online (Sandbox Code Playgroud)

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

我目前的任何理由不起作用?

Ric*_*ano 11

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

include ActiveModel::Conversion
extend  ActiveModel::Naming
Run Code Online (Sandbox Code Playgroud)

看一下这个问题:没有ActiveRecord的form_for,表单操作没有更新.

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

resources :contacts, only: 'create'
Run Code Online (Sandbox Code Playgroud)

这将产生以下路线:

contacts POST /contacts(.:format)  contacts#create
Run Code Online (Sandbox Code Playgroud)

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