2017-10-28 59 views
1

在我的ActiveAdmin仪表板中,我有两个资源 - Posts和ScrapedPosts。对于ScrapedPost,我想添加一个发布帖子按钮,当点击该按钮时,该按钮进入创建新帖子的页面(新的动作),其中的所有字段都预先填入了值来自ScrapedPost(Post和ScrapedPost具有相同的模式)。如何在ActiveAdmin中添加一个按钮来为另一个资源创建新记录,其中的字段预填充了当前资源的值?

这是我目前的内部应用程序/管理/ 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。我该怎么做?

[我一开始就在本周学习的回报率,所以我会很感激,如果你能解释一下你的解决方案,以及]

回答

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 

首先要确保用于复制发表作品。如果你想创建一个发布ScrapedPost,那么你将需要通过帖子的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以缓解学习曲线。

相关问题