【问题标题】:rspec controller post action test fails with ActiveModel::ForbiddenAttributesErrorrspec 控制器后操作测试因 ActiveModel::ForbiddenAttributesError 而失败
【发布时间】:2013-08-23 22:55:15
【问题描述】:

我想测试我的控制器的发布操作,但它失败并显示ActiveModel::ForbiddenAttributesError。

需要'spec_helper'

describe HomeController do
  describe "POST #create" do
    context "with valid attributes" do
      it "saves the new feed in the database" do
        expect{
          post :create, feed: FactoryGirl.attributes_for(:valid_feed)
        }.to change(Feed,:count).by(1)
      end
    end
end

工厂:

FactoryGirl.define do
  factory :valid_feed, class: Feed do
    title "CRE"
    address "http://cre.fm/feed/m4a/"
  end
  factory :invalid_feed, parent: :valid_feed do |f|
    f.address nil
  end
end

控制器:

class HomeController < ApplicationController
  def index
  end
  def create
    @feed = Feed.new(params[:feed])
    if @feed.save
      redirect "/"
     else
      render nothing: true
    end
  end
end

我检查了控制器中的参数以查看是否有问题,但 params[:feed] 包含有效的哈希。 我在这里错过了什么吗?

【问题讨论】:

  • 这是 Rails 3 还是 Rails 4?如果是 Rails 4,请查看关于 strong parameters 的信息。

标签: ruby rspec controller factory-bot


【解决方案1】:

是的,你错过了一些东西。 Rails 4 默认启用了strong parameters。您需要将其更改为以下内容:

class HomeController < ApplicationController

  def index
  end

  def create
    @feed = Feed.new(feed_params)
    if @feed.save
      redirect "/"
     else
      render nothing: true
    end
  end

  private

  def feed_params
    params.require(:feed).permit(:allowed, :elements, :of, :feed)
  end

end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多