无法找到带ID轨道4的[型号]

时间:2013-09-12 23:35:15

标签: ruby-on-rails ruby-on-rails-4

class PublicController < ApplicationController
def album_list
    @albums = Album.find_by_sql('SELECT * FROM albums;')

end
def alt_album_list
    @albums = Album.find(:all)
    render(:action => 'album_list')

end
def show_album
    @album = Album.find(:first)

end
def show
    @album = Album.find(params[:id])
    render(:action => 'show_album')

end
def new 
    @album = Album.new
end

这是我的溃败:

MusicLibrary::Application.routes.draw do
resources :albums
resources :public
get "public/album_list"
get "public/alt_album_list"
get "public/one_album_list"
get "public/show_album"
get 'public/show'
get 'public/create'
get 'public/new'
get 'public/edit'

模特:

<html>
<head>
<title> Interesting </title>
</head>
<body> 
<%= form_for(@album) do |f| %>
<p>
<%= f.label :title %>
<%= f.text_field :title %>
</p>

<p>
<%= f.label :artist %>
<%= f.text_field :artist %>
</p>

<p>
<%= f.label :genre %>
<%= f.text_field :genre %>
</p>

<p>
<%= f.label :release_date %>
<%= f.datetime_select :release_date %>
</p>

<%= f.submit %>
<% end %>

</body>

</html>

我有一个错误:Couldn't find [model] with ID rails 4 我知道这可以非常简单controllermodel和视图,但由于该错误,它不起作用。我没有复制Controller的全部内容,因为它没用。其余的代码看起来很好,工作正常,但是......

2 个答案:

答案 0 :(得分:0)

这可能是一个远景,因为你还没有发布完整的信息。但正如你提到的那样,你正在使用Rails 4,似乎你有一些过时的语法。

def album_list
  @albums = Album.find_by_sql('SELECT * FROM albums;')
end

def alt_album_list
  @albums = Album.all
  render :album_list
end

def show_album
  @album = Album.first
end

答案 1 :(得分:0)

您的错误: PublicController中的ActiveRecord :: RecordNotFound#show无法找到id = show的专辑 意味着你没有传入一个id,这可能意味着你可能是由于你的路线重复造成的某种类型的碰撞。

资源会自动为您提供带有ID的显示路径,但是您输入的手册不会,并且除非您执行以下操作,否则将允许使用ID: 得到“public /:id / show”

我猜你每次点击你的节目链接,或重定向链接,你都会以某种方式使用错误的路线。

我会删除你不必要的获取路线,但是这样做:

resources :public do
  get "album_list", :on => collection
  get "alt_album_list", :on => collection
  get "one_album_list", :on => collection
  get "show_album", :on => collection
end

我还会遵循使用的所有建议,而不是查找(:all),而在其他帖子中建议的其他建议只是为了使您的应用程序更清洁和最新。