我正在使用Ruby on Rails创建一个应用程序,在Admin面板中有blogs
和posts
个控制器。管理区域的路由如下所示:
constraints :subdomain => "admin" do
scope :module => "admin" do
root to: "pages#index"
resources :blogs do
resources :posts, :controller => "posts"
end
end
end
我所拥有的是http://admin.mydomain.com/blogs
,其中显示了/blogs/2/
显示该博客帖子的博客。
我想要的是在/blogs/2/posts/new
创建blog_id
附加到帖子的新帖子时。
在admin/posts_controller.rb
我将此作为创建动作
def create
@post = Post.new(params[:post])
if @post.save
redirect_to posts_path, notice: 'Post was successfully created.'
else
render action: "new"
end
end
目前它只是创建一个帖子。我想将该帖子链接到网址中的当前博客ID - /blog/2
。
我将如何做到这一点?
答案 0 :(得分:3)
有很多方法可以做到这一点,并且取决于您实际使用控制器的方式。如果您只是编辑/ blogs / 1 / xxxx上的帖子,那么您可以这样做:
blog_id将以params[:blog_id]
的形式提供。我通常创建一个before_filter来查找博客,然后在创建操作中完成剩下的工作:
before_filter do
@blog = Blog.find(params[:blog_id])
end
def create
@post = @blog.posts.build(params[:post])
if @post.save
redirect_to [@blog, @post], notice: 'Post created successfully'
else
render :action => 'new'
end
end
答案 1 :(得分:2)
你想使用ActiveRecord关联的力量,这样的事情应该有效:
def create
@blog = Blog.find_by_id(params[:id])
if @blog
@post = @blog.posts.new(params[:post])
if @post.save
redirect_to posts_path, notice: 'Post was successfully created.'
end
end
render :new
end
首先找到博客文章,根据你的路线将会是:params hash中的id。接下来使用@blog.posts.new
创建与该博客相关联的新帖子。