Ruby on Rails形成错误

时间:2016-11-22 22:02:55

标签: ruby-on-rails ruby

我正在从在线教程构建应用程序。它跟踪"电影"和"出租。"我正在尝试设置您创建新租赁的部分。当我提交表单时,我收到此错误:

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

特别是这条线似乎有问题:

        @rental = @movie.rentals.build(params[:rental])

以下是租赁模式:

class Rental < ApplicationRecord
has_one :movie
end

这是电影的控制器:

class MoviesController < ApplicationController

def new 
    @movie = Movie.new
    @movies = Movie.all
end

def create 
    @movie = Movie.new(movie_params)
    if @movie.save
        redirect_to new_movie_path
    end 
end

private

def movie_params
    params.require(:movie).permit(:title, :year)
end 
end

这是电影模型:

class Movie < ApplicationRecord
has_many :rentals
end

以下是路线:

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 %> 

我不确定发生了什么。据我所知,我正在复制教程。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

您没有对rentals使用强参数,因此ActiveModel::ForbiddenAttributesError错误。

这应该可以解决错误:

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