我遵循Ryan Bates的教程,即Jquery文件上传,但示例只有1个模型。我试图为我的应用程序制作一个版本,serviceproviders has_many照片和照片属于service_viv。
这是我的new.html.erb
<h1>Add a Clearance</h1>
<%= form_for Clearance.new do |f| %>
<%= f.label :avatar, "Clearances" %>
<%= f.file_field :avatar, multiple: true, name: "clearance[avatar]" %>
<% end %>
清除控制器
def new
@serviceprovider = Serviceprovider.find(params[:serviceprovider_id]
@clearance = @serviceprovider.clearances.new
end
def create
@clearance = Clearance.create(clearance_params)
end
我收到错误undefined method "clearances_path"
如何上传带有相关型号的照片。谢谢!
**
**
我正在尝试为Serviceproviders创建一个清关照片库。例如,服务提供者有警察许可,NBI清关以及可能通知他没有任何刑事案件的任何许可。现在我可以使用jquery-fileupload上传照片(感谢@OlivierLance帮助我),但现在我希望每次上传照片时它都会自动显示。我刚开始使用rails,我很难学习一些宝石,因为正如我所说,我对rails不熟悉。我已经解决了我将重新加载页面的问题,以便每次上传时都会显示,但不会发生。页面有一个无限循环重定向页面。
def new
@serviceprovider = Serviceprovider.find(params[:serviceprovider_id])
@clearance = @serviceprovider.clearances.new
@clearances = @serviceprovider.clearances
redirect_to new_serviceprovider_clearance_url(@serviceprovider)
end
end
def create
@serviceprovider = Serviceprovider.find(params[:clearance][:serviceprovider_id])
@clearance = @serviceprovider.clearances.create(clearance_params)
end
我怎样才能实现这一目标?
答案 0 :(得分:0)
免责声明:此答案仅在您打算让new
页面处理特定Clearance
实例的单Serviceprovider
次
让我们澄清一下你得到错误的原因:Rails告诉你的是,你是否正在尝试为Clearance
对象创建一个表单,但它并没有知道将创建POST
请求发送到的位置(最终位于生成的action
标记的<form>
属性中的网址。)
您必须为Rails添加路由,以便将网址与ClearancesController
的操作相匹配。您应在routes.rb
文件中添加的最小内容是:
resources :clearances, only: [:create]
我假设您已经在服务提供商中拥有嵌套路由&#39;显示新清关表格的路线。
这条新路线将创建一个新的路线助手clearances_path
,如Rails routing guide中所述。
既然这条路线存在,Rails就能够为新的Clearance
对象生成表单。
但是,您需要对当前代码进行一些修复。
首先,您的表单是使用Clearance.new
构建的。 Clearance.new
将返回一个新的,裸露的,没有对象的Clearance
对象(可怜的!)。但是,您需要的是一个新对象,该对象属于您将clearances
添加到Serviceprovider
的{{1}}集合。
幸运的是,您已在控制器的new
操作中创建了其中一个。为什么不用它? :)
# new.html.erb
<h1>Add a Clearance</h1>
<%= form_for @clearance do |f| %>
<%= f.hidden_field :serviceprovider_id %>
<%= f.label :avatar, "Clearances" %>
<%= f.file_field :avatar, multiple: true, name: "clearance[avatar]" %>
<% end %>
为什么重要?好吧,因为这个Clearance
对象已经用非空serviceprovider_id
初始化(假设你的外键名称)。请注意,我添加了一个隐藏字段,用于在表单中保存此ID。
完成所有这些后,当您提交表单时,它会转到您的create
操作,并在您的数据库中创建一个新的Clearance
对象,该对象将与{ {1}}你想要的。
考虑到问题的内容,我能回答多远。我想你可以通过关注Ryan Bates&#39;来获取文件上传/保存权限。教程。如果没有,您需要添加有关您做了/不做什么以及实际失败的详细信息!
(PS:您绝对应该将Serviceprovider
课程重命名为Serviceprovider
)
的更新强>
ServiceProvider
是显示您的表单和已上传图片的操作。 new
是您提交表单时调用的操作。您想要的是,一旦添加许可,请返回create
页面:将new
移至redirect_to
操作的末尾,而不是create
。