12

不知道为什么我似乎无法弄清楚这一点,因为它似乎应该如此简单,但基本上,我正在尝试创建一个指向操作的链接(我希望“发布”出现在显示旁边,编辑、删除)为 Active Admin 中的每个资源。

我使用了他们在 wiki 上建议的代码:

 action_item do
    link_to "button label", action_path(post)
 end

问题是,我收到一个错误,因为 rails 不知道“post”是什么。是零。Github 上的 Wiki 版本具有相同的代码,只是它们使用“资源”而不是帖子。我不确定他们是否暗示我会在那里使用我自己的资源名称,或者你是否应该实际使用变量“resource”。我尝试了后一种情况并得到“没有 ID 无法找到”错误。

所以问题是,我在哪里设置变量名?他们使用什么作为迭代器?

4

3 回答 3

11

我以前用这个:

action_item only: :show do |resource|
  link_to('New Post', new_resource_path(resource))
end

更新

action_item only: :show do
  link_to('New Post', new_resource_path)
end

谢阿尔特拉各斯

于 2013-04-15T20:56:10.963 回答
6

我已经用一段非常相似的代码完成了这一点,请参阅:

在我的里面:app/admin/posts.rb

member_action :publish, method: 'get' do
  post = Post.find(params[:id])
  post.publish!
  redirect_to admin_post_path(post), notice: 'Post published!'
end

就我而言,我希望链接按钮仅在show操作中可用。

action_item :only => :show do
  if post.status == 'pending' 
    link_to 'Publish', publish_admin_post_path(post)
  elsif post.status == 'published'
    link_to 'Expire', expire_admin_post_path(post)
  else
  end
end

希望这对你有帮助!

于 2012-08-03T18:16:28.360 回答
6

在 ActiveAdmin 中,您必须使用resource来引用您正在使用的对象。

当您resource在类似的操作中使用时index,您可能会收到错误,因为 ActiveAdmin 无法使用。为防止这种情况,请指定您希望按钮出现的操作。

要指定一个动作,请给参数only提供一个您希望按钮出现在其中的动作数组。例如:

action_item :only => [:show, :edit] do
  ...
end
于 2013-07-08T16:40:25.960 回答