Rails: "Couldn't find Movie with 'id'=" (ActiveRecord::RecordNotFound)
Rails: "Couldn't find Movie with 'id'=" (ActiveRecord::RecordNotFound)
我正在学习一个非常基本的应用程序的教程,所以这应该很容易修复,但我无法弄清楚。它说找不到 'id=all'
的电影
该教程有点过时,我已经不得不进行一些更改,例如 params.require 但仅此而已。
movie_controller.rb
class MoviesController < ApplicationController
def new
@movie = Movie.new
@movies = Movie.find(:all)
end
def create
@movie = Movie.new(params[:movie_id])
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
def new
@movie = Movie.find(params[:id])
@rental = @movie.rentals.build
end
new.html.erb(电影)[=17=]
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 !@movies.blank? %>
<table border=1>
<tr>
<th> Title </th>
<th> Year </th>
</tr>
<% for item in @movies %>
<tr>
<td> <%= link_to item.title, :controller => :rentals, :action => :new, :id => item.id %> </td>
<td> <%= item.year %> </td>
</tr>
<% end %>
</table
<% end %>
new.html.erb(出租)
Movie: <%= @movie.title %> <%= link_to "back", new_movie_path %>
<hr>
<%= form_for @rental do |f| %>
Borrowed on: <%= f.text_field :borrowed_on %> <br>
Returned on: <%= f.text_field :returned_on %> <br>
<%= f.submit %>
<% end %>
我的路线只是 resources :movies
以防万一。
您需要这样做才能保存数据,在 create
操作中,代替 params[:movie_id]
,使用 comment_params
def create
@movie = Movie.new(comment_params)
if @movie.save
redirect_to new_movie_path
end
end
希望对您有所帮助!
有一个建议,你可以在改进格式上提出,
class MoviesController < ApplicationController
def new
@movie = Movie.new
@movies = Movie.find(:all)
end
def create
@movie = Movie.new(params[:movie_id])
if @movie.save
redirect_to new_movie_path
end
end
def comment_params
params.require(:movie).permit(:title, :year)
end
end
在你的控制器新方法中,它应该像 @movies = Movie.all, Movie.find 基本上有 ID,你有 comment_params 用于允许属性,但您没有在创建操作中传递它,它应该像这样 Movie.new(comment_params) 在创建操作上,这是rails 4
中的新安全功能
我正在学习一个非常基本的应用程序的教程,所以这应该很容易修复,但我无法弄清楚。它说找不到 'id=all'
的电影该教程有点过时,我已经不得不进行一些更改,例如 params.require 但仅此而已。
movie_controller.rb
class MoviesController < ApplicationController
def new
@movie = Movie.new
@movies = Movie.find(:all)
end
def create
@movie = Movie.new(params[:movie_id])
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
def new
@movie = Movie.find(params[:id])
@rental = @movie.rentals.build
end
new.html.erb(电影)[=17=]
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 !@movies.blank? %>
<table border=1>
<tr>
<th> Title </th>
<th> Year </th>
</tr>
<% for item in @movies %>
<tr>
<td> <%= link_to item.title, :controller => :rentals, :action => :new, :id => item.id %> </td>
<td> <%= item.year %> </td>
</tr>
<% end %>
</table
<% end %>
new.html.erb(出租)
Movie: <%= @movie.title %> <%= link_to "back", new_movie_path %>
<hr>
<%= form_for @rental do |f| %>
Borrowed on: <%= f.text_field :borrowed_on %> <br>
Returned on: <%= f.text_field :returned_on %> <br>
<%= f.submit %>
<% end %>
我的路线只是 resources :movies
以防万一。
您需要这样做才能保存数据,在 create
操作中,代替 params[:movie_id]
,使用 comment_params
def create
@movie = Movie.new(comment_params)
if @movie.save
redirect_to new_movie_path
end
end
希望对您有所帮助!
有一个建议,你可以在改进格式上提出,
class MoviesController < ApplicationController
def new
@movie = Movie.new
@movies = Movie.find(:all)
end
def create
@movie = Movie.new(params[:movie_id])
if @movie.save
redirect_to new_movie_path
end
end
def comment_params
params.require(:movie).permit(:title, :year)
end
end
在你的控制器新方法中,它应该像 @movies = Movie.all, Movie.find 基本上有 ID,你有 comment_params 用于允许属性,但您没有在创建操作中传递它,它应该像这样 Movie.new(comment_params) 在创建操作上,这是rails 4
中的新安全功能