【问题标题】:Populating a Select with Model Data in Rails在 Rails 中使用模型数据填充 Select
【发布时间】:2009-09-25 13:47:57
【问题描述】:

我觉得有必要为提出如此简单的问题而道歉,但我对 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。其次,专辑收藏应以current_user.albums 访问(已在上面更正)。一个用户has_many 相册和一个相册belongs_to 用户。

更新:应下面IV的要求,目前使用以下代码:

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

我收到此错误:

undefined method `album_id' for #<Image:0x1042ec110>

我在第 24 行得到错误。

【问题讨论】:

  • 您能解释一下您遇到了什么样的错误吗?或者,发布您的开发日志的一些输出?
  • 就是这样,错误已经结束,具体取决于我使用的变体。但是,“album_id”通常会出现某种合并错误或缺少方法错误。目前,使用以下代码: 22:

    23: 24: 25:

    我收到此错误:#<0x1042ec110>

标签: ruby-on-rails


【解决方案1】:

我认为select 元素是 Rails 中更令人困惑的方面之一,因为正如您所说,似乎有很多方法可以做到这一点。

试试这个:

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

【讨论】:

  • 我已经更正/强调了关于我的结构的几点,但这对我不起作用。可能是由于我必须进行 b/c 的更改,我上面有一些不好的信息。我现在拥有的是&lt;%= f.select( :album_id, current_user.albums.collect { |a| [a.name, a.id] } ) -%&gt;。我也试过.allnamed_scope。
【解决方案2】:

好吧,我不确定这是最好的方式,Rails 方式,或者坦率地说,甚至是一种优雅的方式,但这是我使用的代码,到目前为止似乎可以工作。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 2021-10-20
    • 2014-09-22
    相关资源
    最近更新 更多