我是Rails的新手,来自.NET,实际上这是我工作的第一个Ruby项目,所以我还在研究如何处理事情。
我将从我的问题的结构开始:我有一个项目表和一个图像表。还有一个 ProjectImage 表,您猜测它有一个project_id
和一个image_id
。作为用户,当我创建项目时,在新/编辑视图中,我希望能够选择我想要上传的任何图像(我想强制执行至少一个图像,但也许这是另一个问题)。
我想这是可能的,因为在.NET
中做起来相当简单,我只需要一个代表Project
的 ViewModel ,至少一个需要image_id
。但是,我对Rails的理解还不足以在Rails中看到方法的直接复制。
我环顾四周,根据我的理解,我可能没有以正确的方式接近这一点,所以我的问题是,这是否可能,我是否正确接近它,如果是这样,Rails的传统方法是什么?
答案 0 :(得分:2)
您可以这样设置表单
<%= form_for :project, :html=> {:multipart=>true} do |f| %>
<%= f.text_field :title %>
<%= file_field_tag :images, :multiple => true, :name => 'images[]' %>
<%= f.submit %>
<% end %>
然后在你的控制器中,你的项目属性在params[:project]
(在这种情况下只是一个标题),而params[:images]
将是一组上传的图像。
当然有一些好的宝石用于此目的,如carrierwave或paperclip,但正如你所说,你的理解还不够,我想你可能想在你之前掌握它开始走捷径。
对于 ProjectImage 表,如果您不需要存储在关系本身中的其他信息,则应该将project_id列添加到images表中,然后让图像{{1}和项目belong_to :project
答案 1 :(得分:1)
欢迎来到Rails的世界,从一个新手到另一个。
我建议看一下载波。我发现将图像上传到我的模型非常有用。它还可以使用imagemagick来确保您的用户不会将图片上传到大图,并且还可以进行大量验证以确保您的数据库不会过载。
你可以在这里找到github,随时问你是否有任何问题:
https://github.com/carrierwaveuploader/carrierwave
还有一个较旧的宝石,很多人都可以使用,你可以在这里找到:
https://github.com/thoughtbot/paperclip
还不确定您是否需要一个项目表,因为您只需要在项目表中添加一列,图像将作为文件路径的哈希值存储在那里,并由项目或用户引用。
您可以在此处查看有关carrierwave的railscast: