2013-09-29 69 views
0

我正在使用rails 4.我有一個使用驗證的模型,但不存儲任何記錄。它僅用於發送電子郵件的網絡聯繫表單。Rails 4 Strong Params錯誤

我想用這個控制器/模型使用強大的參數。目前,我正在爲我的新操作獲得一個nomethoderror。有任何想法嗎?我認爲這與我的模型不是一個完整的模型有關。

減少代碼以方便查看。

型號:

class Message 
    include ActiveModel::Model 
    include ActiveModel::ForbiddenAttributesProtection 
end 

控制器:既然你想允許消息在MessagesController,而不是project

class MessagesController < ApplicationController 
    def new 
    @message = Message.new 
    end 

    private 

    def project_params 
     params.require(:message).permit(:name, :email, :content) 
    end 
end 

回答

2

project_params需要被重新命名爲message_params

請嘗試:

class MessagesController < ApplicationController 
    def new 
    @message = Message.new 
    end 

    private 

    def message_params 
     params.require(:message).permit(:name, :email, :content) 
    end 
end 

更新:

而且,儘管你提到「精簡下來,方便查看代碼」,我想補充一點,你還需要定義att_accessor那些允許的屬性如下:

class Message 
    include ActiveModel::Model 
    include ActiveModel::ForbiddenAttributesProtection 

    attr_accessor :name, :email, :content 
end 

請參閱在這個問題上路易十四的回答是: 「Rails Model without a table

+0

好消息在message_params。我試圖從項目腳手架上覆制一些代碼。我不明白爲什麼我必須在Rails 4中添加attr_accessor?運行一個腳手架,它不使用attr_accessor,並且params.require(model).permit(列)與創建和更新操作一起運行。新操作僅在模型中包含@project = Project.new並且沒有attr_accessor。 –

+1

@KeilMiller,您必須在模板文件中訪問這些屬性,例如'new.html.erb',這是NoMethodError的起源。強參數直接替代了Rails4之前用於批​​量分配的'attr_accessible'。我們使用'attr_accessor',一個ruby方法來爲屬性定義getter和setter。請看看'attr_accessor'和'attr_accessible'之間的區別。 – vee

+0

我想我現在明白了。非常感謝你的明確解釋。這個[問題/答案](http://stackoverflow.com/questions/3136420/difference-between-attr-accessor-and-attr-accessible)對於attr_accessible和attr_accessor之間的區別也很有用。 –