Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails 4 ActiveModel::禁止属性错误_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails rails 4 ActiveModel::禁止属性错误

Ruby on rails rails 4 ActiveModel::禁止属性错误,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我尝试使用rails 4进行简单的创建 我的控制器: class AdsController < ApplicationController def new @ad = Ad.new end def create @ad = Ad.new(params[:ad]) @ad.save end def show @ad = Ad.find(params[:id]) end def index @ads = Ad

我尝试使用rails 4进行简单的创建

我的控制器:

class AdsController < ApplicationController

  def new
    @ad = Ad.new
  end

  def create
    @ad = Ad.new(params[:ad])    
    @ad.save
  end

  def show
    @ad = Ad.find(params[:id])
  end

  def index
    @ads = Ad.first(3)
  end


  private
  def ad_params    
    params.require(:ad).permit(:title, :price, :description)
  end
end
类AdsController
表格:


从我的角度来看,这没问题,但我得到了这个错误 我做错了什么

更新:


我的问题是在create action中将错误的值传递给新方法:解决方法是将
ad_参数
传递给它

我建议跳过更新,以便代码正常工作

您的问题可能不在于控制器,而在于您的模型: 检查是否可以使用follow标记访问属性

attr_accessible :title, :price, :description
Rails 4确实与我所理解的有所不同,前面的答案提供了一些很好的链接:

无论何时从数据库访问内容,都需要使用attr_accessible/Strong参数

更新

哦,年轻一点,还没意识到Rails 4使用了强大的参数。我知道OP已经解决了他原来的问题,但我要纠正这一点,这样它就可以作为正确的答案

这将是控制器级别的问题,因为Rails 4要求您将控制器中的属性列为白名单

Ad.create(params[:ad].require(:ad).permit(:title, :price, :description))
Ad.create(ad_params)
def ad_params
  params.require(:ad).permit(:title, :price, :description)
end
大多数情况下,您将允许在创建和更新操作中使用相同的参数,因此最好将其移动到控制器中自己的方法中

Ad.create(params[:ad].require(:ad).permit(:title, :price, :description))
Ad.create(ad_params)
def ad_params
  params.require(:ad).permit(:title, :price, :description)
end

正如OP在评论中指出的,他实施的许可参数方法没有从许可证中调用。

我也面临同样的问题,工作了6个小时,最终得到了解决方案

试试这个代码,它会帮你的! 在Rails 4中,添加此功能是为了以不同的方式处理创建

def new
  @ad = Ad.new
end

def create
  @ad = Ad.create(ad_params)
  @ad.save
end

private

def ad_params
  params.require(:ad).permit(:title, :price, :description)
end

您的应该如下所示:

def new
    @ad = Ad.new(params[:ad].permit(:title, :price, :description))
end
我的看起来像这样:

def create
    @about = About.new(params[:about].permit(:introduction, :description))

    respond_to do |format|
        if @about.save
            format.html { redirect_to @about, notice: 'About was successfully created.' }
            format.json { render action: 'show', status: :created, location: @about }
        else
            format.html { render action: 'new' }
            format.json { render json: @about.errors, status: :unprocessable_entity }
        end
    end
end

在添加参数许可之前添加新参数

   def create
     params.permit!
     @ad = Ad.new(params[:ad])    
     @ad.save
   end

我的问题是在create action中将错误的值传递给新方法,解决方法是将ad_参数传递给它。这可能不应该标记为答案。这不是答案。我同意,这对我遇到的相同问题没有任何帮助,这个答案也没有任何帮助。我仍然收到ActiveModel::ProbidenAttributesError in PostsController错误。@Ömer在几周前发布了一个更新,以确保它没有错误,看看这对你是否有效。标题,价格,description是表ADP的列名,请在使用时格外小心。Rails文档中写道:“使用permit!时应格外小心,因为它将允许对所有当前和未来的模型属性进行质量分配。”