-1

Я продолжаю получать NoMethodError независимо от того, где я пытаюсь и ухожу. Переход к http://localhost:3000/ дает мне ошибку undefined method new_movie_rentals_path'. И собирается где-то вроде http://localhost:3000/movies/5/rentals/new (и должен быть ID 5, я также пробовал много других номеров) дает мне undefined method 'title' for nil:NilClass. Итак, я получаю несколько ошибок маршрутизации, которые, как я полагаю? Но я не уверен.Rails: NoMethodError (s). Не удается получить доступ к страницам

movies_controller.rb

class MoviesController < ApplicationController 
    def new 
    @movie = Movie.new 
    @movies = Movie.all 
    end 

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

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

end 

rentals_controller.rb

class RentalsController < ApplicationController 

    class RentalsController < ApplicationController 
    def new 
     @movie = Movie.find(params[:movie_id]) 
     @rental = @movie.rentals.build 
    end 

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


    def rental_params 
     params.require(:rental).permit(:id, :borrowed_on, :returned_on, :movie_id) 
    end 

    end 

end 

(видео) new.html.erb

Enter new movie information <br> 


<%= form_for @movie do |f| %> 
    Title: <%= f.text_field :title %> <br> 
    Year: <%= f.text_field :year %> <br> 
    <%= f.submit %> 
<% end %> 

<hr> 

List of all movies: <br> 
<% if [email protected]? %> 
    <table border=1> 
    <tr> 
     <th> Title </th> 
     <th> Year </th> 
    </tr> 
    <% for item in @movies %> 
    <tr> 
     <td> <%= link_to new_movie_rentals_path(@movie) %> </td> 
     <td> <%= item.year %> </td> 
    </tr> 
    <% end %> 
    </table 

<% end %> 

(аренда) new.html.erb

Movie: <%= @movie.title %> <%= link_to "back", new_movie_path %> 
<hr> 

<%= form_for [@movie, @rental] do |f| %> 
    Borrowed on: <%= f.text_field :borrowed_on %> <br> 
    Returned on: <%= f.text_field :returned_on %> <br> 
    <%= f.submit %> 
<% end %> 


Rentals: 
<% if [email protected]? %> 
    <% for item in @movie.rentals %> 
    <%= item.borrowed_on %>, <%= item.returned_on %> <br> 
    <% end %> 
<% else %> 
    No rentals yet 
<% end %> 

routes.rb

Rails.application.routes.draw do 

    resources :movies do 
    resources :rentals 
    end 

    root 'movies#new' 

movie.rb

class Movie < ActiveRecord::Base 
    has_many :rentals 
end 

rental.rb

class Rental < ActiveRecord::Base 
    belongs_to :movie 
end 

рейк маршруты:

Prefix Verb URI Pattern         Controller#Action 
    movie_rentals GET /movies/:movie_id/rentals(.:format)   rentals#index 
        POST /movies/:movie_id/rentals(.:format)   rentals#create 
new_movie_rental GET /movies/:movie_id/rentals/new(.:format)  rentals#new 
edit_movie_rental GET /movies/:movie_id/rentals/:id/edit(.:format) rentals#edit 
    movie_rental GET /movies/:movie_id/rentals/:id(.:format)  rentals#show 
        PATCH /movies/:movie_id/rentals/:id(.:format)  rentals#update 
        PUT /movies/:movie_id/rentals/:id(.:format)  rentals#update 
        DELETE /movies/:movie_id/rentals/:id(.:format)  rentals#destroy 
      movies GET /movies(.:format)       movies#index 
        POST /movies(.:format)       movies#create 
     new_movie GET /movies/new(.:format)      movies#new 
     edit_movie GET /movies/:id/edit(.:format)     movies#edit 
      movie GET /movies/:id(.:format)      movies#show 
        PATCH /movies/:id(.:format)      movies#update 
        PUT /movies/:id(.:format)      movies#update 
        DELETE /movies/:id(.:format)      movies#destroy 
      root GET /           movies#new 
+0

Проведите «рейк-маршруты» и опубликуйте результаты. – ptd

+0

Просто добавлен в исходное сообщение. – roguerat

+0

Возможный дубликат [Rails: форма не сохраняется должным образом] (http://stackoverflow.com/questions/28209602/rails-form-isnt-saving-properly) –

ответ

0

Вы должны попробовать с new_movie_rental_path

Также вы можете проверить конвенции здесь: http://guides.rubyonrails.org/routing.html

+0

Хм, я изменил его, и я получаю «Нет маршрута» соответствует [GET] "/ movies/2/rental/new" 'error. И вот когда я иду на адрес 'http: // localhost: 3000/movies/2/rental/new'. Дело в том, что я имел обыкновение иметь доступ ко всем этим страницам, но затем я изменил свои маршруты и ссылки на по существу гнездо аренду в кино. Теперь это не сработает. – roguerat

0

Где вы звоните new_movie_rentals_path попробовать позвонить new_movie_rental_path

Убедитесь, что фильм был найден в вашем нового действия на ваш RentalsController

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