2016-11-22 15 views
0

Ich baue eine App aus einem Online-Tutorial. Es verfolgt "Movies" und "Rentals". Ich versuche, den Teil einzurichten, wo Sie eine neue Vermietung erstellen. Als ich das Formular abgesendet haben, bekomme ich diesen Fehler:Ruby on Rails Formularfehler

ActiveModel::ForbiddenAttributesError in RentalsController#create 

Hier ist die vollständige Vermietungen Controller:

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 

Es scheint, insbesondere mit dieser Linie Ausgabe zu nehmen:

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

Hier ist das Mietmodell:

class Rental < ApplicationRecord 
has_one :movie 
end 

Hier ist der Controller für Filme:

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 

ist die Movie-Modell:

class Movie < ApplicationRecord 
has_many :rentals 
end 

Hier sind die Routen:

Rails.application.routes.draw do 
resources :movies, :rentals 
root 'movies#new' 

end 

Hier ist die Form:

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

Ich bin mir nicht sicher wh geht weiter. Soweit ich das beurteilen kann, kopiere ich das Tutorial genau. Jede Hilfe würde sehr geschätzt werden!

+0

Dieser Fehler, wenn Sie versuchen, einen Parameter zu senden, die Sie nicht auf die params Methode hinzugefügt haben, in diesem Fall, dass Sie vollständig die rental_params Methode fehlen. –

Antwort

2

Sie verwenden keine starken Parameter für rentals, daher der ActiveModel::ForbiddenAttributesError Fehler.


Diese den Fehler beheben soll: geschieht

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

Jetzt bekomme ich diesen Fehler: "Beim Zuweisen von Attributen müssen Sie einen Hash als Argument übergeben." Irgendwelche Gedanken? –

+0

Wie sieht 'rental_params' aus? Auch einige Stracktrace des Fehlers – Rashmirathi

+0

Def Rental_Params \t params.require (: Miete) .permit (: geliehene_on,: vermietet_on) Ende –