rails联系表单问题

时间:2013-05-28 20:22:26

标签: ruby-on-rails ruby-on-rails-3.1

我正在尝试在现有视图上实现联系我们表单(模型的“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

1 个答案:

答案 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