2011-12-24 119 views
0

我有这两个控制器关于故事和类别,他们单独工作。现在,我想在添加新闻时添加选择已创建的类别。我应该如何连接它们以及如何使用select标签在new.html.erb中显示所有类别?如何连接两个控制器

class StoriesController < ApplicationController 
    def index 
    @stories = Story.all 
    end 

    def show 
    @story = Story.find(params[:id]) 
    end 

    def new 
    @story = Story.new 
    end 

    def create 
    @story = Story.new(params[:story]) 

    if @story.save 
     redirect_to stories_path, :notice => "Your story was saved" 
    else 
     render "new" 
    end 
    end 

    def edit 
    @story = Story.find(params[:id]) 
    end 

    def update 
    @story = Story.find(params[:id]) 

    if @story.update_attributes(params[:story]) 
     redirect_to stories_path, :notice => "Your story has been updated" 
    else 
     render "edit" 
    end 
    end 

    def destroy 
    @story = Story.find(params[:id]) 
    @story.destroy 
    redirect_to stories_path, :notice => "Your story has been deleted" 
    end 
end 

class CategoriesController < ApplicationController 
    def index 
    @categories = Category.all 
    end 

    def new 
    @category = Category.new 
    end 

    def create 
    @category = Category.new(params[:category]) 

    if @category.save 
     redirect_to categories_path, :notice => "Your category was saved" 
    else 
     render "new" 
    end 
    end 

    def edit 
    @category = Category.find(params[:id]) 
    end 

    def update 
    @category = Category.find(params[:id]) 

    if @category.update_attributes(params[:category]) 
     redirect_to categories_path, :notice => "Your category has been updated" 
    else 
     render "edit" 
    end 
    end 

    def destroy 
    @category = Category.find(params[:id]) 
    @category.destroy 
    redirect_to categories_path, :notice => "Your category has been deleted" 
    end 
end 
+0

[This](http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html)可能会有帮助。 – 2011-12-24 22:06:49

回答

0

你可以尝试用:

# app/controllers/stories_controller.rb 
def new 
    @categories = Category.all 
    @story = Story.new 
end 

# app/views/stories/_form.html.erb 
<%= form_for @story do |f| %> 
    #.... 
    <%= f.collection_select :category_id, @categories, :id, :title %> 
+0

是的,谢谢,但在index.html.erb如何查看category.title not story.id – user1107922 2011-12-25 00:25:02

+0

Inside' @ stories.each do | story |'use story.category.title'显示每个故事的分类标题 – 2011-12-25 09:45:31

+0

不工作,我昨天试过,但是我有这个错误消息:未定义的方法'标题'为零: NilClass – user1107922 2011-12-25 12:48:38

1

这不是你需要将控制器连接在一起。你真的只需要StoriesController来查询类别列表,并将其放置到类变量中,以便视图可以利用它。

class StoriesController < ApplicationController 
    ... 
    def new 
    @categories = Category.all 
    @story = Story.new 
    end 
+0

我试过了,但是我遇到了类别问题。 <%= select(“story”,“category_id”,Category.all.collect {| p | [p.title,p.id]},{:include_blank => true})%> 我认为我救了ID,但是当我想看到标题,我看到#<类别:0x000000035be318>,我不知道如何解决它 – user1107922 2011-12-24 23:46:48

0

嘿控制器ü可以访问类的标题。创建一个分类标题数组而不是分类对象数组。

# app/controllers/stories_controller.rb 
    def new 
    @categories = Category.all.map(&:title) 
    @story = Story.new 
    end 
+0

谢谢,我解决了这个问题,但我有另一个,当我想在index.html.erb查看所有类别不是id的标题的新闻。我试过这个:story.category.title 但我有错误消息:未定义的方法'标题'为零:NilClass - – user1107922 2011-12-25 13:12:00