【问题标题】:if statement for a model on a different show page不同显示页面上模型的 if 语句
【发布时间】:2016-07-24 11:12:47
【问题描述】:

我有两张桌子

create_table "book_rooms", force: :cascade do |t|
  t.integer  "room"
  t.string   "room_number"
end

create_table "rooms", force: :cascade do |t|
  t.string   "room_number"
end

在房间显示页面中,我想显示与“rooms.room_number”具有相同值的“book_rooms.room_number”,但我不断将所有书房对象打印为每个房间显示页面中的数组

房间显示页面

<% @customer = BookRoom.all %>
<% if @customer[0].room_number = @room.room_number %>   
  <% @customer.each do |c| %>
    <%= c.first_name %>
  <% end %>
<% end %>  

请问有什么我做的不对吗?如果 room_numbers 不相符,则 if 语句是错误的,但无论如何它们仍然会被打印出来!我被卡住了

【问题讨论】:

    标签: ruby-on-rails activerecord rails-activerecord rails-api


    【解决方案1】:
    BookRoom.where(:room_number => @room.room_number)
    

    这将从特定的Room(即@room)获取所有带有room_numberBookRoom。 顺便说一句,我猜你的关联是不正确的。 BookRoomRoom 之间必须存在 has_many 关系。

    您面临的问题是,在您的@customer 变量中,您分配了所有BookRooms。然后基于这个变量你创建了一个循环。因此所有BookRoom 都在显示。

    另外,在您的 book_rooms 架构中没有 first_name

    编辑

    BUG:在您的 if 条件中,您使用了 = 运算符而不是 ==

    <% @customer = BookRoom.all %>
    <% @customer.each do |c| %>
      <% if c.room_number == @room.room_number %>   
        <%= c.first_name %>
      <% end %>
    <% end %>
    

    【讨论】:

    • 另外,您应该通过 id 定义 ActiveRecord 关系。不知道为什么 room_number 是一个字符串,但是如果您将对象定义为典型的 rails 迁移,它应该默认生成一个 id 列。
    • 对我来说是裸露的.. 实际上有一个 first_name 列只是没有包含它。 erm book_room 已经属于一个父级,所以我没有将两个模型关联起来。所以如果没有它们相互关联,我就无法实现我的逻辑?因为我已经尝试过 '.where' 并且它做了同样的事情......所以 if 语句不会停止循环?
    • @ChineduLloydAbalogu,已编辑答案。
    猜你喜欢
    • 1970-01-01
    • 2012-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 2015-01-17
    • 2017-02-08
    相关资源
    最近更新 更多