在我的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,所以如果你能解释一下你的解决方案,我将不胜感激。]
答案 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以缓解学习曲线。