我有一个需要编辑的模型,它与名为 BillingProfile 的当前用户关联。如何添加链接到当前用户的 BillingProfile 的编辑页面的菜单项?我不想要或不需要 BillingProfile 的索引页面,因为用户只能编辑自己的。
class User
has_one :billing_profile
end
我有一个需要编辑的模型,它与名为 BillingProfile 的当前用户关联。如何添加链接到当前用户的 BillingProfile 的编辑页面的菜单项?我不想要或不需要 BillingProfile 的索引页面,因为用户只能编辑自己的。
class User
has_one :billing_profile
end
您可以使用 Cancan 来管理允许用户编辑自己的计费配置文件的能力。
能力.rb
...
cannot :edit_billing_profile, User do |u|
u.user_id != user.id
end
...
管理员/用户.rb
ActiveAdmin.register User do
action_item :only => :show do
link_to "Edit BP", edit_bp_path(user.id) if can? :edit_billing_profile, user
end
end
或者你可以尝试这样的事情:
ActiveAdmin.register User do
form do |f|
f.inputs "User" do
f.input :name
end
f.inputs "Billing Profile" do
f.has_one :billing_profile do |bp|
w.input :address if can? :edit_billing_profile, bp.user
end
end
f.buttons
end
end
我没有测试它,但我在一个项目上做了类似的事情。
这可能会帮助你——
添加自定义链接:
ActiveAdmin.register User, :name_space => :example_namespace do
controller do
private
def current_menu
item = ActiveAdmin::MenuItem.new :label => "Link Name", :url => 'http://google.com'
ActiveAdmin.application.namespaces[:example_namespace].menu.add(item)
ActiveAdmin.application.namespaces[:example_namespace].menu
end
end
end
我基本上创建了一个新的 ActiveAdmin::MenuItem 并将其添加到具有命名空间 example_namespace 的当前 ActiveAdmin 菜单中,并在 current_menu 方法的末尾返回菜单。注意:current_menu 是 ActiveAdmin 期望的方法,所以不要更改它的名称。您可以添加任意数量的项目,这些项目中的每一个都将转换为导航标题上的链接。请注意,这适用于 ActiveAdmin 版本 > 0.4.3,因此如果您想为版本 <= 0.4.3 执行此操作,您可能需要自己进行挖掘。
我定义了一个 LinkHelper,它有以下两种方法:
#This will return an edit link for the specified object instance
def edit_path_for_object_instance(object_instance)
model_name = object_instance.class.to_s.underscore
path = send("edit_#{model_name}_path", object_instance)
end
#This will return an show link for the specified object instance
def show_path_for_object_instance(object_instance)
model_name = object_instance.class.to_s.underscore
path = send("#{model_name}_path", object_instance)
end
您可以直接从您的视图中调用 edit_path_for_object_instance 方法并传入 user.billing_profile 对象。
这将为您提供直接指向实体的链接,从而产生类似 /billing_profile/ID/edit 的 URL
另一种方法是使用 fields_for。这将允许您为用户属性创建表单并同时更新关联的 BillingProfile。它看起来像这样:
<%= form_for @user%>
<%= fields_for @user.billing_profile do |billing_profile_fields| %>
<%= billing_profile_fields.text_field :name %>
<% end %>
<%end%>
见这里:http ://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html