在 Rails 4 中的索引页上实例化新对象
Instantiate new object on index page in Rails 4
简单的问题,我无法解决一些问题。
我正在尝试模仿这个 Railscast Episode 的前几个步骤。我有一个 picture
-Model,我正在尝试在索引页上实例化此类对象。因此,我正在使用这些行:
index.erb.html
<%= form_for Picture.new do |f| %>
<%= f.label :image, "Upload" %>
<%= f.file_field :image, multiple: true %>
<% end %>
但是我收到这个错误:
undefined method `pictures_path' for #<#<Class:0xb465af0>:0x58fc488>
如果我删除表格,它会完美运行。看起来很简单,但我无法解决。我将不胜感激。
图片控制器
class PicturesController < ApplicationController
respond_to :html
def index
@house = House.find(params[:house_id])
@pictures = @house.pictures
respond_with(@pictures)
end
def new
@picture = Picture.new
end
def create
end
def destroy
end
private
def picture_params
params.require(:picture).permit(:id, :name, :house_id, :image, :_destroy)
end
routes.rb
Rails.application.routes.draw do
resources :houses do
resources :pictures, only: [:index]
end
end
您的 pictures
资源嵌套在您的 houses
资源中。没有路由允许你在没有 House
的情况下创建新的 Picture
来提供周围的上下文,因此 form_for
不能自动生成 URL 如果你给它 仅 Picture.new
.
你需要给它房子和照片。
通常,您会这样做:
form_for [@house, @house.pictures.new] do |f|
根据您给定的路线信息,您实际上并没有 pictures_path
。您只有这些路线(如果您执行 rake routes
):
house_pictures GET /houses/:house_id/pictures(.:format) pictures#index
houses GET /houses(.:format) houses#index
这就是您收到该错误的原因。
您可以访问 house_pictures_path
但不能访问 pictures_path
。
要解决此问题,您必须使用 house_pictures_path
并将 @house
和 @pictures
作为参数发送给它。像这样:
<%= form_for [@house, @house.pictures.build] do |f| %>
<%= f.label :image, "Upload" %>
<%= f.file_field :image, multiple: true %>
<% end %>
简单的问题,我无法解决一些问题。
我正在尝试模仿这个 Railscast Episode 的前几个步骤。我有一个 picture
-Model,我正在尝试在索引页上实例化此类对象。因此,我正在使用这些行:
index.erb.html
<%= form_for Picture.new do |f| %>
<%= f.label :image, "Upload" %>
<%= f.file_field :image, multiple: true %>
<% end %>
但是我收到这个错误:
undefined method `pictures_path' for #<#<Class:0xb465af0>:0x58fc488>
如果我删除表格,它会完美运行。看起来很简单,但我无法解决。我将不胜感激。
图片控制器
class PicturesController < ApplicationController
respond_to :html
def index
@house = House.find(params[:house_id])
@pictures = @house.pictures
respond_with(@pictures)
end
def new
@picture = Picture.new
end
def create
end
def destroy
end
private
def picture_params
params.require(:picture).permit(:id, :name, :house_id, :image, :_destroy)
end
routes.rb
Rails.application.routes.draw do
resources :houses do
resources :pictures, only: [:index]
end
end
您的 pictures
资源嵌套在您的 houses
资源中。没有路由允许你在没有 House
的情况下创建新的 Picture
来提供周围的上下文,因此 form_for
不能自动生成 URL 如果你给它 仅 Picture.new
.
你需要给它房子和照片。
通常,您会这样做:
form_for [@house, @house.pictures.new] do |f|
根据您给定的路线信息,您实际上并没有 pictures_path
。您只有这些路线(如果您执行 rake routes
):
house_pictures GET /houses/:house_id/pictures(.:format) pictures#index
houses GET /houses(.:format) houses#index
这就是您收到该错误的原因。
您可以访问 house_pictures_path
但不能访问 pictures_path
。
要解决此问题,您必须使用 house_pictures_path
并将 @house
和 @pictures
作为参数发送给它。像这样:
<%= form_for [@house, @house.pictures.build] do |f| %>
<%= f.label :image, "Upload" %>
<%= f.file_field :image, multiple: true %>
<% end %>