【问题标题】:Rails scaffolding belongs_to - showing #<MyClass:xxxx>Rails 脚手架 belongs_to - 显示 #<MyClass:xxxx>
【发布时间】:2013-02-24 11:41:12
【问题描述】:

经验丰富的 Java 开发人员,Rails 新手 - 想知道脚手架中的 belongs_to 关系。

看到另一个这样的答案

Does rails scaffold command support generate belongs_to or many to many model middle table migration info?

并遵循rails generate scaffold_controller obj:references 模式。

索引/显示页面显示 #&lt;MyClass:xxxx&gt; 而不是我想要的字符串 - 目标类(belongs_to 的父端)中是否有方法我需要重写以指定标识符?

同样在编辑视图中,它似乎正在尝试将引用修改为字符串而不是下拉列表 - 我需要指定什么来实现吗?

谢谢!

顺便说一句 - 我能够在 Django 和 Grails 中获得类似的脚手架,其中外键变成了下拉列表;我希望 Rails 也同样简单,我只是想念它。

【问题讨论】:

    标签: ruby-on-rails scaffolding belongs-to


    【解决方案1】:

    您可以覆盖实例上的 #to_s 方法,因为它是被调用的方法。

    class FooDoodle < ActiveRecord::Base
      def to_s
        name
      end
    end
    

    那是显示记录的时候。

    但是,当您实际使用表单设置关联时,scaffold 只会在视图中生成一个输入字段,以便您输入 id。例如,您可以有一个下拉菜单,但必须以某种方式选择该下拉菜单的选项。

    例如,如果有 2000 条可能的关联记录,您会显示哪些?你显示2000吗?只有前10个?该逻辑将进入您的控制器。

    所以,例如:

    class FooDoodlesController < ApplicationController
      def edit
        @foodoodle = FooDoodle.find(params[:id])
    
        @friends = @foodoodle.possible_friends # or else
      end
    end
    

    并使用selectoptions_for_select 作为选择

    # _form.html.erb
    
    <%= form_for @foodoodle do |f| %>
      <%= f.label :friend %>
      <%= f.select :friend, @friends.map{ |p| [p.to_s, p.id] } %>
    

    【讨论】:

    • 感谢关于 to_s 的提示。假设列表足够小,有什么方法可以生成下拉列表 - 还是我必须手动完成?它会是什么样子?
    • @wrs 那里,我添加了一个例子。
    猜你喜欢
    • 2015-03-03
    • 2011-12-20
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-19
    • 1970-01-01
    相关资源
    最近更新 更多