如何在 ActiveAdmin 中添加一个按钮来为另一个资源创建一个新记录,并使用当前资源中的值预先填充字段?
How to add a button in ActiveAdmin to create a new record for another resource, with fields pre-populated with values from the current resource?
在我的 ActiveAdmin 仪表板中,我有两个资源 - Posts 和 ScrapedPosts。对于 ScrapedPost,我想添加一个 Publish Post 按钮,单击该按钮会转到创建新 Post 的页面(new 操作),其中 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
这将添加一个名为 发布 Post 的新按钮。当我点击它时,正如预期的那样,它会创建一个用于添加新 Post 的页面。但是,我希望这些字段预先填充来自我创建 post.
的当前 ScrapedPost 的值
到目前为止我已经尝试了很多东西。 action_item 的文档非常基础,没有帮助。 It looks like I can't pass parameters to the action identified by new_admin_post_path。我该怎么做?
[我这周才开始学习 RoR,所以如果你也能解释一下你的解决方案,我将不胜感激。]
action_item
所做的只是将样式为按钮的 link 注入显示页面。您可以通过将参数嵌入 link 来将参数传递给 link 目标。但是,new
不接受参数,因此要复制 Post 你需要的是 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 有效。如果你想从 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 都是 Rails 上 Ruby 之上的额外抽象层,所以我的建议始终是先掌握 vanilla Rails 以缓解学习曲线。
在我的 ActiveAdmin 仪表板中,我有两个资源 - Posts 和 ScrapedPosts。对于 ScrapedPost,我想添加一个 Publish Post 按钮,单击该按钮会转到创建新 Post 的页面(new 操作),其中 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
这将添加一个名为 发布 Post 的新按钮。当我点击它时,正如预期的那样,它会创建一个用于添加新 Post 的页面。但是,我希望这些字段预先填充来自我创建 post.
的当前 ScrapedPost 的值到目前为止我已经尝试了很多东西。 action_item 的文档非常基础,没有帮助。 It looks like I can't pass parameters to the action identified by new_admin_post_path。我该怎么做?
[我这周才开始学习 RoR,所以如果你也能解释一下你的解决方案,我将不胜感激。]
action_item
所做的只是将样式为按钮的 link 注入显示页面。您可以通过将参数嵌入 link 来将参数传递给 link 目标。但是,new
不接受参数,因此要复制 Post 你需要的是 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 有效。如果你想从 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 都是 Rails 上 Ruby 之上的额外抽象层,所以我的建议始终是先掌握 vanilla Rails 以缓解学习曲线。