在Rails中使用模型数据填充选择

时间:2009-09-25 13:47:58

标签: ruby-on-rails

我觉得有必要为提出这么简单的问题道歉,但我对Rails指南越来越感到沮丧。我确信他们回答了我的问题,但他们没有为我提供足够的背景知道如何应用他们给我的东西。谷歌也没有多大帮助,尽管我可能只是在搜索错误的术语/短语。鉴于免责声明,我只是继续问:

我有Image HABTM Album。为了支持这一点,我有一个albums_images表,其中包含image_idalbum_id个字段(没有其他字段)。对于我的生活,我无法弄清楚如何填充我的图像形式部分,以便用户可以选择新上传的图像应该属于的相册。

我正在学习Rails,所以我真的只想要基础知识。我确信有一些花哨的插件可以做到这一百种方式,但我想首先学习基础知识并从那里开始构建。我的表格部分是教科书:

<% form_for( @image, :html => { :multipart => true } ) do |f| %>
  # All the basics you'd expect to see.
<% end %>

我最近的尝试没有比我尝试过的任何其他变种更好,但它看起来像这样:

<p>
  <%= f.label :album_id %>
  <%= f.select( :album_id, current_user.albums, :id, :name ) -%>
</p>

同样,我认识到问题的简单性,我已经阅读了我能找到的内容,但我无法将其整合到一个完整的解决方案中。似乎有很多方法可以做到这一点,但没有真正讨论每个方法,它们的优点/缺点或如何在更大的背景下真正使用它们。

感谢。

更新:需要注意的几个键和代码更正。首先,图像和专辑之间存在HABTM关系。两个型号表都没有FK直接引用另一个。其次,专辑收藏应该以{{1​​}}(上面更正)进行访问。用户current_user.albums相册和相册has_many用户。

更新:根据以下IV的要求,目前使用此代码:

belongs_to

我收到此错误:

22: <p>  
23:   <%= f.label :album_id %>  
24:   <%= f.select( :album_id, current_user.albums.collect {|a| [a.name, a.id]}) -%>  
25: </p>

我在第24行得到错误。

2 个答案:

答案 0 :(得分:16)

我认为select元素是Rails中比较混乱的方面之一,因为正如你所说,似乎有很多方法可以做到这一点。

试试这个:

<%= f.select(:album_id, @image.albums.all.collect {|a| [a.name, a.id]}) -%>

答案 1 :(得分:6)

好吧,我不确定这是最好的方式,Rails的方式,或者坦率地说,甚至是一种优雅的方式,但这里是我用过的代码,到目前为止似乎正在运行。

<%= f.label 'Albums' -%>
<%= collection_select( :image, :album_ids, current_user.albums, :id, :name, {}, { :multiple => true } ) -%>

此时,当我说“正常工作”时,我真正可以证明的是,页面呈现时没有错误,并且在编辑图像时选择了相应的相册或专辑。我仍然对从很多不同来源拼凑出“完整”解决方案的难度感到震惊。