2016-11-22 7 views
0

Я создаю приложение из онлайн-учебника. Он отслеживает «Фильмы» и «Аренда». Я пытаюсь создать ту часть, где вы создаете новую аренду. Когда я отправить форму, я получаю эту ошибку:Ошибка формы Ruby on Rails

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

Я не уверен, что надеты. Из того, что я могу сказать, я точно копирую учебник. Любая помощь приветствуется!

+0

Эта ошибка происходит, когда вы пытаетесь отправить параметр, который не добавляется к методу Params, в этом случае вам не хватает метод rental_params целиком. –

ответ

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 
+0

Теперь я получаю эту ошибку: «При назначении атрибутов вы должны передать хэш в качестве аргумента». Есть предположения? –

+0

Как выглядит 'rent_params'? Также отправьте некоторую пробную ошибку об ошибке – Rashmirathi

+0

def rent_params \t params.require (: аренда) .permit (: loaned_on,: rented_on) end –

Смежные вопросы