使用ActiveAdmin编辑单个记录

时间:2013-01-15 06:24:20

标签: ruby-on-rails ruby ruby-on-rails-3 activeadmin

我有一个需要编辑的模型,该模型与当前用户名为BillingProfile相关联。如何添加链接到当前用户的BillingProfile编辑页面的菜单项?我不想或不需要BillingProfile的索引页面,因为用户只能编辑自己的索引页面。

class User
  has_one :billing_profile
end

3 个答案:

答案 0 :(得分:3)

您可以使用Cancan管理允许用户编辑自己的结算资料的功能。

ability.rb

...
cannot :edit_billing_profile, User do |u|
  u.user_id != user.id
end
...

管理员/ users.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

我没有测试过,但我在项目上做了类似的事情。

答案 1 :(得分:1)

这可能对你有帮助 -

添加自定义链接:

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上进行挖掘,你可能需要自己进行挖掘。

答案 2 :(得分:0)

我定义了一个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

这样的网址

另一种方法是使用fields_for。这将允许您为User属性创建表单并同时更新关联的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