我有以下型号:
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
我目前所拥有的任何理由都不起作用?
答案 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
添加到您的联系人文件中