【发布时间】:2016-02-18 13:31:07
【问题描述】:
我开始了一个包含两个模型(帖子和类别)的项目,然后安装了 ActiveAdmin。一切都很好,除了创建新帖子中的“类别”选择框和过滤器“类别”中的选择框(右侧列)。
我的类别模型:
class Category < ActiveRecord::Base
has_many :posts
end
我的帖子模型
class Post < ActiveRecord::Base
belongs_to :category
belongs_to :user
end
我的 admin_user 模型:
class AdminUser < ActiveRecord::Base
devise :database_authenticatable,
:recoverable, :rememberable, :trackable, :validatable
end
app/admin/admin_user.rb:
ActiveAdmin.register AdminUser do
permit_params :email, :password, :password_confirmation
index do
selectable_column
id_column
column :email
column :current_sign_in_at
column :sign_in_count
column :created_at
actions
end
filter :email
filter :current_sign_in_at
filter :sign_in_count
filter :created_at
form do |f|
f.inputs "Admin Details" do
f.input :email
f.input :password
f.input :password_confirmation
end
f.actions
end
end
app/admin/category.rb:
ActiveAdmin.register Category do
permit_params :cname
end
app/admin/post.rb:
ActiveAdmin.register Post do
permit_params :title, :body, :category_id, :user_id, :admin_user_id, :email
end
使用 Chrome 浏览器开发工具中的检查器工具,我在创建新帖子中发现从数据库表中获取的内容:
<select name="post[category_id]" id="post_category_id"><option value=""></option>
<option value="4">#<Category:0x007f61b9658e08></option></select>
它说 name="post[category_id]" 而不是 name="post[cname]" 因为我认为应该在下拉列表(选择框)中显示类别的名称。而是在下拉列表中列出: #
如果我通过选择这个令人困惑的名称创建帖子,则在帖子的显示页面中,类别名称显示为
/admin/categories/4
我已经花了整整两天的时间尝试和错误 ActiveAdmin Intallation,设计版本和 ActiveAdmin 版本的问题,并试图解决这个问题。但是现在我没有任何想法可以修复它。
我已经找到了一些更改标签的方法,或者我认为它会是什么。但我正在寻找的是如何更改 ActiveAdmin 在下拉菜单中显示的内容?据我所知,将通过 ID 找到对象,但我希望下拉列表中显示的 ID 的类别名称 - 而不是 ID。我认为这应该是默认输出,但我得到的是下拉菜单中类似“#”的文本。
如果有多个类别,它在下拉列表中将如下所示:
_________________________________
|_______________________________▼|
| #<Category:0x007fac18bb1540> |
| #<Category:0x007fac18bb0f00> |
| #<Category:0x007fac18bb1220> |
| #<Category:0x007fac18bb0be0> |
| #<Category:0x007fac18bb92f8> |
|_______________________________|
我可以做些什么来改变显示这个
'#<Category:...7fac18bb92f8>'
到下拉列表中的类别名称?
【问题讨论】:
-
您看错了问题 - ActiveAdmin 所做的是正确的。当您想通过表单设置关联时,您传递关联记录的 id。这样它就可以工作了——如果你传递名字,你将不得不做一个愚蠢的查询,比如
Post.new({ category_id: Category.find(params[:post][:cname]).id })。 -
您的问题应该是“如何在 ActiveAdmin 中更改关联记录的标签?”
-
我想到但我发现更改标签是我不确定,我不仅将键“category_id”的名称更改为新的名称,而且值将相同和以前一样。
-
这是我第一次使用 ActiveAdmin。
-
你还是不明白。你不应该改变价值。如果您希望输入更改与帖子相关联的类别,请使用类别 ID 传递
post[category_id]- 这不仅在 ActiveAdmin 中,而且在一般的 Rails 中。
标签: ruby-on-rails devise activeadmin