将种子文件中的数据显示到显示页面

时间:2017-03-03 16:54:14

标签: ruby-on-rails ruby database

我对铁杆很新。我尝试做的是在种子文件中显示我的观看/显示页面的信息。这是我的一些种子文件,它只是为我正在做的学校项目组成的组织。

`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

这非常基础,我知道我只是在学习。

3 个答案:

答案 0 :(得分:0)

首先,您应该在种子文件中使用 RSpec.describe Role, type: :model do let(:fake_class) { Class.new } describe "set constants" do before { stub_const("#{described_class}", fake_class) } it { expect(described_class::ROLE_ADMIN).to eq("Administrador") } end end ,这样如果您的任何创建失败,您将看到标记的异常。

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

作为临时手动测试,您可以在rails之间运行是这样的:在您的种子文件运行之后,您可以执行以下操作:

first and second

验证您的数据是否已正确播种。

此时,您可能会发现更简单地实施和调试rails console Organization.count Organization.all showedit行为。

答案 1 :(得分:0)

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

执行此操作后,您可以使用Active Record在页面上的数据库中显示新创建的数据。

我在这里看到两个可能的问题:

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

答案 2 :(得分:0)

在OrganizationsController#show方法中,您将@organization设置为数据库中所有组织条目的列表。因此,@ organization.name不是有效的方法。你可以做两件事之一。如果您只想在展示页面上展示一个组织,这是典型的,您将不得不以某种方式找到该组织。当用户请求特定组织的节目页面时,他通常以RESTful方式进行,即通过/ organizations /:id,其中: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