我想知道如何在我的项目索引上只打印带有 :is_available 列的房间或带有 :true 值(是布尔值)的房间表。
我不知道如何实现这一目标(对不起,我是 Rails 的新手)。任何建议将不胜感激!
我当前的代码有此错误:
"ActiveRecord::RecordNotFound in RoomsController#home找不到没有身份证的房间"
这是我rooms_controller代码:
class RoomsController < ApplicationController
before_action :get_room, only: [:index, :home]
def index
end
def show
@room = Room.find(params[:id])
end
def home
if params[:set_locale]
redirect_to root_url(locale: params[:set_locale])
else
puts @rooms if Room.all(params[:is_available => :true])
end
end
def get_room
@rooms = Room.all
end
end
你已经有了@rooms = Room.all
,你只需要精确你的查询(从全部到你的is_available
限制)。
def home
if params[:set_locale]
redirect_to root_url(locale: params[:set_locale])
else
puts @rooms.where(is_available: true)
end
end
此外,还应避免在控制器逻辑中使用puts
。将变量传递给视图(您可以更改@rooms
值或创建新变量@available_rooms
),respond_with
它或使用Rails.logger
(如果您使用 put 作为调试解决方案)记录它。
def index
end
def home
if params[:set_locale]
redirect_to root_url(locale: params[:set_locale])
elsif params[:is_available]
puts @rooms
end
end
def get_room
@rooms = Room.where(is_available: true)
end
在控制器中使用放置 - 不是一个好主意。使用视图显示数据。
您可能会遇到以下几个问题:
路线
您的index
方法看起来为空。我猜你用"家"作为替代品
在这种情况下,您必须知道这是什么类型的操作 - member
或collection
操作?这很重要的原因是,当您定义routes
时,您必须确保以正确的方式定义路线。对于您的home
路线,我会这样做:
#config/routes.rb
resources :rooms do
get "home", action: "home"
end
范围
您可以使用scope
恢复存在:is_available
的所有值。这在模型中是这样的:
#app/models/room.rb
Class Room < ActiveRecord::Base
scope :is_available?, -> { where(is_available: true) }
end
这将允许您调用
@room = Room.is_available?
法典
尽管您没有向我们提供错误的任何上下文(当它发生时,您如何使它发生),但这是我为帮助修复它所做的:
#app/controllers/rooms_controller.rb
def home
if params[:set_locale]
redirect_to root_url(locale: params[:set_locale])
else
puts Room.is_available?
end
end
这可能会根据您发送的参数以及您发送它们的方式而改变
def home
if params[:set_locale]
redirect_to root_url(locale: params[:set_locale])
else
puts @rooms if params[:is_available] && Room.where(is_available: true)
end
end
应该工作。