2017-03-03 95 views
1

我对rails非常陌生。我想要做的是将我的信息显示在我的views/show页面的种子文件中。这是我的一些种子文件,它只是组织我参与的一个学校项目。将种子文件中的数据显示到显示页面

`Organization.create(
name: "St. John's church", 
location: "222 Bathurst st.", 
description: "Church" 
) 

Organization.create(
name: "Women's Shelter Toronto", 
location: "777 Yonge St.", 
description: "Womens Shelter" 
) 

Organization.create(
name: "Toronto Homeless Shelter", 
location: "111 King St.", 
description: "Shelter" 
)` 

这里是我的节目页面

<h1>Organization#show</h1> 


<div class="container"> 
    <h1>Organization:</h1> 
    <%= @organization.name %> 
</div><br> 

<div class="container"> 
    <h1>Description:</h1> 
</div><br> 

和组织控制器

def show 
    @organization = Organization.all 
    end 

    def new 
    @organization = Organization.new 
    end 

    def create 
    @organization = Organization.new(organization_params) 
    if @organization.save 
     redirect_to root_url 

    else 
     render "new" 
    end 
    end 


    private 
    def organization_params 
    params.require(:organization).permit(:name, :description, :location) 
    end 
    end 

这非常基本的我知道,我只是学习。

回答

0

首先,你应该使用使用create!在你的种子文件,这样,如果你的任何创造失败,你会看到标记异常。

其次,您作为show操作使用的内容应该更可能是您的控制器中的#index操作,因为这是rails约定。当你偏离rails惯例时,你的编程生活会变得更加沉重和慢。

作为临时手动测试可以first and second之间运行是这样的:你的种子文件被运行后,你可以做喜欢的东西:

rails console 
Organization.count 
Organization.all 

,以验证您的数据正常播种。

在这一点上,您可能会发现执行和调试您的showeditnew操作更直接。

+0

感谢您的帮助:) – caprison

+1

@caprison一定要选择一个答案,“正确“,这给出了响应者的声望点。 –

0

seeds.rb文件的目的是填充它的创建后的第一次数据库。

你做到这一点后,您可以使用Active Record在页面上显示数据库中的新创建的数据。

我在这里看到2可能出现的问题:

  1. 你不需要``在seeds.rb文件的开头和结尾。
  2. 没有运行rake db:seed - 此命令采用seeds.rb文件和实际创建的记录在数据库中。
+0

感谢您的帮助:) – caprison

0

在您的OrganizationsController#show方法中,您将@organization设置为数据库中所有组织条目的列表。 @ organization.name因此不是一个有效的方法。你可以做两件事之一。如果您只想在展示页面上显示一个组织,这将是典型的,您必须以某种方式找到该组织。当用户为特定组织请求显示页面时,他通常以REST风格执行此操作,即通过/ organizations /:id进行操作,其中:id是他或她想要显示的特定组织的标识。在你的控制器中尝试:

def show 
    @orginazation = Organization.find(params[:id]) 
end 

params []是Rails如何在视图和控制器之间传递信息。在这种情况下,如果用户请求/ organizations/1,则params [:id]将为1。然后,您的控制器将访问数据库并找到ID为1的组织。

现在,如果您想要显示所有组织的列表,您通常会在#index方法中执行此操作。像这样的东西。

def index 
    @organizations = Organization.all 
end 

然后,你将有一个index.html.erb文件中,你将通过@organizations迭代,就像这样。

<% @organizations.each do |organization| %> 
    <%= organization.name %> 
    <%= organization.location %> 
    <%= organization.description %> 
<% end %> 

这样,当你的用户请求/组织,他或她会看到你的数据库中的所有组织的列表。

编辑:您的文章也表明,你的控制器被称为OrganizationController,它应该是多元的,OrganizationsController和相关的文件名应该是organizations_controller.rb

+0

非常感谢您的帮助。我用你的建议,但我现在得到一个错误无法找到“组织与'身份证'=显示” – caprison

+0

所以你正在导航到/组织/ 1例如?如果任何应该返回一个错误,说:“找不到组织与'ID'= 1。如果是这样的话,你的种子实际上并不在你的数据库。 – SYoung82

+0

要添加到我的上述评论,一种方法来测试如果你的种子是实际上你的数据库中填充的数据类似于@Greg Tarsa在下面推荐的内容:在你的终端中输入'rails c'或'rails console'运行rails控制台,然后输入'Organization.first',这应该返回第一个Organization对象你的数据库如果存在,如果它不知道你的种子不在你的数据库中,如果是这种情况,请尝试运行rake db:在你的终端中进行迁移以填充它们。 – SYoung82