Rails4:如何在关联数据不存在时显示数据

时间:2015-10-12 00:17:26

标签: ruby-on-rails ruby ruby-on-rails-4

我想做的是将数据显示如下;

  • 如果a.title存在,但a.title不存在,则显示@school.rooms.where(day: d).first.name
  • 如果@school.rooms.where(day: d).first.name不存在但a.title存在
  • ,则显示@school.rooms.where(day: d).first.name

如果两个数据都存在,则有效。 虽然我尝试了一些代码,例如exist?nil?等,但我无法做到。

如果你能在Rails中给我最好的方法,我将不胜感激。

查看代码

<div class="row">
  <h1 class="col-md-12"><%= @school.title %></h1>
</div>
<div class="row">

  <% @school.days.each do |d| %>

    <h3>Day<%= d %></h3>

    <% @school.articles.where(day: d).each do |a| %>
      <strong><%= a.title %></strong></p>
    <% end %>

    <p>Room: <%= @school.rooms.where(day: d).first.name %></p>

  <% end %>

</div>

控制器代码

class SchoolsController < ApplicationController
  def show
    @school = School.find(params[:id])
  end
end

型号代码

class School < ActiveRecord::Base
    has_many :articles
    has_many :rooms

    def days
      self.articles.pluck(:day).uniq
    end
end


class Article < ActiveRecord::Base
    belongs_to :school
end


class Room < ActiveRecord::Base
    belongs_to :school
end

模式

ActiveRecord::Schema.define(version: 20150999999999) do

  create_table "rooms", force: true do |t|
    t.integer  "school_id"
    t.integer  "day"
    t.string   "name"
    t.string   "detail"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "articles", force: true do |t|
    t.integer  "school_id"
    t.integer  "day"
    t.string   "start_time"
    t.string   "end_time"
    t.integer  "category"
    t.string   "title"
    t.string   "contents"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  create_table "schools", force: true do |t|
    t.string   "title"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

如果你能给我任何建议,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果您始终存在 数据(如果BitmapFactory.decodeFile(f.getAbsolutePath()); 没有,则存在IE a.title),您可以使用以下内容:

@school.rooms.where(day: d).first.name

如果 不存在,您应该可以使用“默认”值:

<p>Room: <%= a.title || @school.rooms.where(day: d).first.name %></p>