2014-01-24 54 views
0

我试图让Rails的4联络形式,但也仅是为Rails 3联系表格导轨4

教程,但我得到这个错误:

undefined method `name' for #<Message:0xa461fcc> 

,我可以了解它不能“看到”模型。

index.html.erb 
<%= form_for Message.new, :url => new_contact_path do |form| %> 
    <fieldset class="fields"> 
    <div class="field"> 
     <%= form.label :name %> 
     <%= form.text_field :name %> 
    </div> 

    ... same fieldsets... 

    <fieldset class="actions"> 
    <%= form.submit "Send" %> 
    </fieldset> 
<% end %> 
在我的模型

message.rb我得到:

class Message 

extend ActiveModel::Naming 
include ActiveModel::Conversion 
include ActiveModel::Validations 
include ActionView::Helpers::TextHelper 

    validates :name, :email, :subject, :body, :presence => true 
    validates :email, :format => { :with => %r{[email protected]+\..+} }, :allow_blank => true 

    def initialize(attributes = {}) 
    attributes.each do |name, value| 
     send("#{name}=", value) 
    end 
    end 

    def persisted? 
    false 
    end 

end 

和路线我刚:

resources :contact 

这就是控制器代码:

class ContactController < ApplicationController 

    def new 
    @message = Message.new 
    end 

    def create 
    @message = Message.new(contact_params) 

    if @message.valid? 
     NotificationsMailer.new_message(@message).deliver 
     redirect_to(root_path, :notice => "Message was successfully sent.") 
    else 
     flash.now.alert = "Please fill all fields." 
     render :new 
    end 
    end 

    private 
    # Never trust parameters from the scary internet, only allow the white list through. 
    def contact_params 
     params.require(:message).permit(:name, :email, :subject, :body) 
    end 

end 

谢谢提前!

回答

1

您需要将attr_accessor :name, :email, :subject, :and_so_on添加到您的课程以确定这些方法。

当使用form.label时,Rails会尝试做your_message.label,但是由于您没有使用活动记录,而只使用活动模型中的几位,因此未定义此方法。

使用属性访问器应该做的伎俩。

+0

它确实有效。谢谢!我认为attr_accessor仅在Rails 3或更低版本中使用。我认为我错了。再次感谢。 – AlexEfremo

+1

attr_accessor是纯ruby,你可能会混淆''attr_accessible''这是rails,并且确实不赞成rails4中的强参数。请接受我的答案,如果你完成了它:) – Intrepidd

+0

是的。我在等待,直到我可以:)再次感谢与解释。你是对的,我很困惑。我的错。 – AlexEfremo