Rails:"无法找到带有' =' =" (ActiveRecord的:: RecordNotFound)

时间:2015-01-29 06:27:22

标签: ruby-on-rails ruby activerecord

我正在关注一个非常基本的应用程序的教程,所以这应该是一个简单的修复,但我无法弄清楚。它说它无法找到带有'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(适用于电影)

    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以防万一。

2 个答案:

答案 0 :(得分:0)

您需要执行此操作以便在create操作中保存数据,代替params[:movie_id],使用comment_params

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

希望这有帮助!

答案 1 :(得分:0)

有一个建议,你可以改进格式,

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,你有permit_params for permit属性,但你没有通过在create action中,它应该像 Movie.new(comment_params)一样创建动作,这是rails 4中的新安全功能