在我的ActiveAdmin面板中,我有两个资源-Posts和ScrapedPosts。对于ScrapedPost,我想添加一个发布帖子按钮,单击该按钮后,会转到一个创建新帖子的页面(新操作),其中Post的所有字段都预先填充了ScrapedPPost的值(Post和ScrapedPast具有相同的架构)。
这是我在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。然而,我希望这些字段预先填充当前ScrapedPost中的值,我正在创建帖子。
到目前为止,我已经尝试了很多东西。action_item的文档是非常基本的,它没有帮助。看起来我无法将参数传递给new_admin_post_path标识的操作。我该怎么做?
[我本周才开始学习RoR,所以如果你也能解释你的解决方案,我将不胜感激。]
action_item
所做的就是在显示页面上注入一个样式为按钮的链接。通过将参数嵌入到链接中,可以将参数传递给链接目标。但是,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创建一个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都是RubyonRails之上的一个额外抽象层,所以我的建议总是首先掌握普通Rails,以简化学习过程。