如何在ActiveAdmin中添加按钮以创建另一个资源的新记录,其中字段预先填充了当前资源中的值?

时间:2017-10-28 12:53:17

标签: ruby-on-rails ruby activeadmin

在我的ActiveAdmin仪表板中,我有两个资源 - 帖子和ScrapedPosts。对于ScrapedPost,我想添加一个发布帖子按钮,当点击该按钮时,会转到用于创建新帖子(操作)的页面,其中包含所有字段for Post 预填充了ScrapedPost的值(Post和ScrapedPost具有相同的架构)。

以下是 app / admin / scraped_post.rb

中的当前代码
ActiveAdmin.register ScrapedPost do

  action_item :view, only: :show do
    link_to "Publish Post", new_admin_post_path
  end

end

这会添加一个名为发布帖子的新按钮。当我按预期点击它时,它会创建一个用于添加新帖子的页面。但是,我希望这些字段预先填充了当前ScrapedPost中我创建帖子的值。

到目前为止,我已经尝试了很多东西。 action_item 的文档非常基础,但没有帮助。 It looks like I can't pass parameters to the action identified by new_admin_post_path。我该怎么办?

[我本周刚开始学习RoR,所以如果你能解释一下你的解决方案,我将不胜感激。]

1 个答案:

答案 0 :(得分:1)

所有action_item正在做的是将显示为按钮的链接注入显示页面。您可以通过将参数嵌入到链接中来将参数传递给链接目标。但是,new不接受参数,因此复制帖子所需的内容为member_action

member_action :clone do
  resource.clone
  render :new
end

可以调用此操作:

action_item :clone, only: :show do
  link_to "Publish Post", clone_admin_post_path
end

首先确保复制帖子。如果你想从Post创建一个ScrapedPost,那么你需要传递Post的id作为参数:

link_to "Publish Post", clone_admin_scraped_post_path(post_id: resource.id)

然后ScrapedPost成员操作可以找到它:

member_action :clone do
  @scraped_post = Post.find(params[:post_id]).clone.becomes(ScrapedPost)
  render :new
end

顺便说一下,无论好坏,ActiveAdmin是Ruby on Rails上的一个额外的抽象层,所以我的建议是首先要掌握vanilla Rails以缓解学习曲线。