2014-01-24 55 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