我正在尝试在现有视图上实现联系我们表单(模型的“show”视图)。
我为NilClass获取了一个未定义的方法`model_name':Class,我不确定我是否正确实现了。
在我的show.html.erb
中<%= form_for @message do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :email %><br />
<%= f.text_field :email %>
</p>
<p>
<%= f.label :content, "Message" %><br />
<%= f.text_area :content %>
</p>
<p><%= f.submit "Send Message" %></p>
<% end %>
在我的主控制器中具有该站点的所有操作(索引,更新,显示),我添加了以下操作
# GET /listings/1
# GET /listings/1.json
def show
@listing = Listing.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @listing }
end
end
def newmessage
@message = Message.new
end
def sendmessage
@message = Message.new(params[:message])
if @message.valid?
# MessageMailer.new_message(@message).deliver
flash[:notice] = "Message envoy avec succes"
redirect_to root_path
else
render :newmessage
end
end
我的Message.rb类看起来像这样:
class Message
extend ActiveModel::Naming
include ActiveModel::Conversion
include ActiveModel::Validations
include ActionView::Helpers::TextHelper
attr_accessor :name, :email, :message
validates :name,
:presence => true
validates :email,
:format => { :with => /\b[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}\z/ }
validates :message,
:length => { :minimum => 10, :maximum => 1000 }
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
答案 0 :(得分:2)
def your_action_where_you_render_form
@message = Message.new
end
def create
@message = Message.new(params[:message])
if @message.save
do this
else
do that
end
end
当您使用<%= form_for @message do |f| %>
构建表单时,这意味着您需要在呈现表单的操作中初始化该变量,就像您在名为newmessage的操作中一样,但是如果您想使用该操作,那么您将需要必须在表格中添加网址,例如Rails 3 Form For Custom Action
def show
@listing = Listing.find(params[:id])
@message = Message.new
respond_to do |format|
format.html # show.html.erb
format.json { render json: @listing }
end
end