Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/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 RubyonRails表单错误_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails RubyonRails表单错误

Ruby on rails RubyonRails表单错误,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在根据在线教程构建一个应用程序。它跟踪“电影”和“租赁”。我正在尝试设置创建新租赁的部分。当我提交表单时,出现以下错误: ActiveModel::ForbiddenAttributesError in RentalsController#create 这是完整的租赁控制器: class RentalsController < ApplicationController def new @movie = Movie.find(params[:id]) @rental

我正在根据在线教程构建一个应用程序。它跟踪“电影”和“租赁”。我正在尝试设置创建新租赁的部分。当我提交表单时,出现以下错误:

ActiveModel::ForbiddenAttributesError in RentalsController#create
这是完整的租赁控制器:

class RentalsController < ApplicationController

def new
    @movie = Movie.find(params[:id])
    @rental = @movie.rentals.build
end

def create 
    @movie = Movie.find(params[:id])
    @rental = @movie.rentals.build(params[:rental])
    if @rental.save 
        redirect_to new_rental_path(:id => @movie.id)
    end
end 
end
以下是租赁模式:

class Rental < ApplicationRecord
has_one :movie
end
表格如下:

<h1><%= @movie.title %></h1>

<%= form_for @rental, :url => {:action => :create, :id => @movie.id } do |r| %>
Borrowed on: <%= r.text_field :borrowed_on %><br />
Returned on: <%= r.text_field :returned_on %><br /> 
<br />
<%= r.button :submit %> 
<% end %> 
<br />
<%= link_to "back", new_movie_path %> 

{:action=>:create,:id=>@movie.id}do | r |%>
借用日期:
返回日期:



我不知道发生了什么事。据我所知,我完全是在复制教程。任何帮助都将不胜感激

您没有对
租赁使用强参数,因此出现了
ActiveModel::ProbiddenAttributeError
错误


这将修复错误:

class RentalsController < ApplicationController

  def new
    @movie = Movie.find(params[:id])
    @rental = @movie.rentals.build
  end

  def create 
    @movie = Movie.find(params[:id])
    @rental = @movie.rentals.build(rental_params)
    if @rental.save 
        redirect_to new_rental_path(:id => @movie.id)
    end
  end

  private

  def rental_params
    params.require(:rental).permit(:borrowed_on, :rented_on)
  end
end
class RentalController@movie.id)
结束
结束
私有的
def租赁参数
参数要求(:出租)。许可证(:借用日,:出租日)
结束
结束

您没有为
租赁使用强参数,因此出现
ActiveModel::ProbiddenAttributeError
错误


这将修复错误:

class RentalsController < ApplicationController

  def new
    @movie = Movie.find(params[:id])
    @rental = @movie.rentals.build
  end

  def create 
    @movie = Movie.find(params[:id])
    @rental = @movie.rentals.build(rental_params)
    if @rental.save 
        redirect_to new_rental_path(:id => @movie.id)
    end
  end

  private

  def rental_params
    params.require(:rental).permit(:borrowed_on, :rented_on)
  end
end
class RentalController@movie.id)
结束
结束
私有的
def租赁参数
参数要求(:出租)。许可证(:借用日,:出租日)
结束
结束

当您尝试发送尚未添加到params方法的参数时,会发生此错误。在这种情况下,您完全缺少rental_params方法。当您尝试发送尚未添加到params方法的参数时,会发生此错误,在本例中,您完全丢失了rental_params方法。现在我得到了一个错误:“在分配属性时,必须传递散列作为参数。”有什么想法吗?rental_params
看起来像什么?另外,发布一些errordef rental_参数的stracktrace.require(:rental).permit(:borroed_on,:render_on)endNow我得到了这个错误:“当分配属性时,必须传递一个散列作为参数。”有什么想法吗?
rental_参数
看起来像什么?另外,发布一些errordef rental_params.require(:rent).permit(:borroed_on,:rendered_on)end的stracktrace
Rails.application.routes.draw do
 resources :movies, :rentals
 root 'movies#new'

end
<h1><%= @movie.title %></h1>

<%= form_for @rental, :url => {:action => :create, :id => @movie.id } do |r| %>
Borrowed on: <%= r.text_field :borrowed_on %><br />
Returned on: <%= r.text_field :returned_on %><br /> 
<br />
<%= r.button :submit %> 
<% end %> 
<br />
<%= link_to "back", new_movie_path %> 
class RentalsController < ApplicationController

  def new
    @movie = Movie.find(params[:id])
    @rental = @movie.rentals.build
  end

  def create 
    @movie = Movie.find(params[:id])
    @rental = @movie.rentals.build(rental_params)
    if @rental.save 
        redirect_to new_rental_path(:id => @movie.id)
    end
  end

  private

  def rental_params
    params.require(:rental).permit(:borrowed_on, :rented_on)
  end
end