我尝试使用Carrierwave上传表单上的文件。到目前为止,我已经设法成功地“躲过了”。一个模型到另一个模型,但现在我很难做到' form_for'正确。
这个想法是设置一个页面(索引),列出对应于每个人(个人)的照片(Fotografias),并能够在同一页面中添加新的。
我有以下型号:
class Fotografia < ActiveRecord::Base
belongs_to :individuo
mount_uploader :title, ArchivoUploader
end
class Individuo < ActiveRecord::Base
has_many :fotografias
end
控制器:
class FotografiasController < ApplicationController
before_action :set_individuo, only: [:index, :show, :edit, :create, :update, :destroy]
before_action :set_fotografia, only: [:show, :edit, :update, :destroy]
def index
@fotografias = @individuo.fotografias
@new_foto = @individuo.fotografias.build
end
def set_individuo
@individuo = Individuo.find(params[:individuo_id])
end
def set_fotografia
@fotografias = Fotografia.find(params[:id])
end
def fotografia_params
params.require(:individuo).permit(:individuo_id, :title)
end
end
title
是保存模型中文件信息的字段。
=form_for [@individuo,@new_foto] do |f|
.row
=f.file_field :title, :class => 'hidden'
=f.label :title, 'New Fotografia', :class => 'btn btn-sm btn-primary'
我读到这可能是一个多元化的问题,但我不认为这是个案。这些是我的路线:
resources :individuos do
resources :fotografias
end
individuo_fotografias GET /individuos/:individuo_id/fotografias(.:format) fotografias#index
POST /individuos/:individuo_id/fotografias(.:format) fotografias#create
new_individuo_fotografia GET /individuos/:individuo_id/fotografias/new(.:format) fotografias#new
edit_individuo_fotografia GET /individuos/:individuo_id/fotografias/:id/edit(.:format) fotografias#edit
individuo_fotografia GET /individuos/:individuo_id/fotografias/:id(.:format) fotografias#show
PATCH /individuos/:individuo_id/fotografias/:id(.:format) fotografias#update
PUT /individuos/:individuo_id/fotografias/:id(.:format) fotografias#update
DELETE /individuos/:individuo_id/fotografias/:id(.:format) fotografias#destroy
我为西班牙语命名法和其他语言混淆道歉。
当我尝试加载http://localhost:3000/individuos/3/fotografias
时,我收到以下错误:&#34;#&lt;#:0x007fa05c5d44a0&gt;&#34;的未定义方法individuo_fotografia_index_path,错误行为{{1 }}
我失踪的任何线索?
根据TK-421的回答,我对form_for进行了更改:
=form_for [@individuo,@new_foto] do |f|
这将确保它进入=form_for [@new_foto.individuo, @new_foto], :html => { :multipart => true }, :url => {:controller => 'fotografias', :action => 'create'} do |f|
控制器中的CREATE操作。为了彻底,这里是控制器中的创建动作:
Fotografias
答案 0 :(得分:1)
鉴于上面的路由输出和错误,似乎Rails正在寻找individuo_fotografias_path
(而不是individuo_fotografia_index_path
)。
但根据您提供的form_for
示例,我不确定这是否是您的意图。
您可以尝试将url
参数添加到表单助手中,以便更具体:url: individuo_fotografias_path
。
或以其他方式尝试doc中定义的辅助工具的一些较长形式选项,直到您按照自己喜欢的方式工作。