活动模型禁止属性错误
有人能够帮助我理解这个错误。 我正在尝试按照构建Web应用程序教程在rails中创建联系表单。 我按照步骤生成了一个消息支架。 然后我修改了我的路线。 接下来它说把它放到消息控制器show动作中。
if @message.save flash[:notice] = 'Thanks for Your Message' format.html { redirect_to root_path }
我已经这样做了,我在MessagesController中得到以下错误ActiveModel :: ForbiddenAttributesError #create ActiveModel :: ForbiddenAttributesError
这是我的消息控制器文件
class MessagesController < InheritedResources::Base def show if @message.save flash[:notice] = 'Thanks for Your Message' format.html { redirect_to root_path } end end end
我的路线文件如下
# devise_for :users
资源:产品做资源:订单,只有:[:new,:create] #tells rails需要产品ID号码结束
# get 'pages/payment' get 'home/about' get 'messages/new' get 'seller' => "products#seller" get 'sales' => "orders#sales" get 'static_pages/productlanding' get "content/veg" get "content/fruit" get "content/mix" get 'subscriptions/new' root 'static_pages#home'
你为什么要保存 节目动作?
–
PARAMS
ForbiddenAttributes
错误源于Rails的strong_params
function。
保存数据时,您需要通过strong_params
方法将参数传递给模型。 这通常通过以下设置实现:
#app/controllers/messages_controller.rb class MessagesController < ApplicationController def show @message = Message.find(params[:id]) end def new @message = Message.new end def create @message = Message.new(message_params) @message.save end private def message_params params.require(:message).permit(:your, :message, :params) end end
这就是你的controller
应该如何构建的。 我相信,您的错误是由于您缺少params传递给模型中的属性(因此您调用@save
导致尝试使用非数据填充模型)。
奇怪。 您可以在控制器的“show”方法中执行保存方法,该方法负责在单独的页面上显示内容。
您应该替换如下:
def create if @message.save flash[:notice] = 'Thanks for Your Message' format.html { redirect_to root_path } end end
我已设法通过以下方式对此进行排序! 谢谢你的帮助
class MessagesController < ApplicationController before_action :set_message, only: [:show, :edit, :update, :destroy] # GET /messages # GET /messages.json def index @messages = Message.all end # GET /messages/1 # GET /messages/1.json def show end # GET /messages/new def new @message = Message.new end # GET /messages/1/edit def edit end # POST /messages # POST /messages.json def create @message = Message.new(message_params) respond_to do |format| if @message.save flash.now[:notice] = 'Thank you for your message!' format.html { redirect_to root_path } format.json { render :show, status: :created, location: @message } else format.html { render :new } format.json { render json: @message.errors, status: :unprocessable_entity } end end end # PATCH/PUT /messages/1 # PATCH/PUT /messages/1.json def update respond_to do |format| if @message.update(message_params) format.html { redirect_to @message, notice: 'Message was successfully updated.' } format.json { render :show, status: :ok, location: @message } else format.html { render :edit } format.json { render json: @message.errors, status: :unprocessable_entity } end end end # DELETE /messages/1 # DELETE /messages/1.json def destroy @message.destroy respond_to do |format| format.html { redirect_to messages_url, notice: 'Message was successfully destroyed.' } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_message @message = Message.find(params[:id]) end . def message_params params.require(:message).permit(:name, :email, :company, :phone, :subject, :body) end end