【问题标题】:Rails - def search issueRails - def 搜索问题
【发布时间】:2017-09-26 13:29:54
【问题描述】:

好的,我对 Rails 很陌生,所以请耐心等待 :)

我不确定如何在页面控制器中构造 def 搜索,以便它返回正确的结果(现在结果为空白)。 我正在为我的项目调整课程代码。原始课程展示了如何通过地址而不是通过下拉属性选择来搜索房间。它还按距离而不是价格对结果进行排序。这是我为我的项目提出的建议:

def search
    # STEP 1
    if params[:search].present? && params[:search].strip != ""
      session[:loc_search] = params[:search]
    end

    # STEP 2
    if session[:loc_search] && session[:loc_search] != ""
      @rooms_type = Room.where(active: true).order(session[:loc_search], order: 'price')
    else
      @rooms_type = Room.where(active: true).all
    end

    # STEP 3
    @search = @rooms_type.ransack(params[:q])
    @rooms = @search.result

    @arrRooms = @rooms.to_a

    end

我很确定 def 搜索中有几个错误。有人可以帮我解决这个问题吗?

这是我的房间模型属性。

class CreateRooms < ActiveRecord
  def change
    create_table :rooms do |t|
      t.string :type
      t.timestamps
    end
  end
end

主页上的搜索小部件的结构如下:

<%= form_tag search_path, method: :get do %>
  <div class="row">
    <div class="col-md-7">
      <%= select_tag :type, options_for_select([['Single', 1], ['Double', 2]]), ,class: "form-control" %>
    </div>

    <div class="col-md-2">
      <%= submit_tag "Search", class: "btn btn-normal btn-block" %>
    </div>
  </div>

<% end %>

搜索页面执行以下操作:

<div class = "row">
  <% @rooms.each do |room| %>
    <div class = "col-md-4">
      <div class = "panel panel-default">
        <div class = "panel-heading preview">
          <% image_tag room.cover_photo (:medium)  %>
        </div>
        <div class = "panel-body">
          <% link_to room.type, room %>
        </div>
      </div>
    </div>
  <% end %>
</div>

谢谢。

基于@crispychicken 反馈的更新代码 - 请参阅屏幕截图在此处输入图像描述

【问题讨论】:

  • 有什么问题? - 我认为您需要将 = 添加到您的 image_tag 和 link_to 助手中。
  • 您对搜索表单或页面结果有疑问吗?
  • 随着页面结果..它总是空白,没有结果显示...

标签: ruby-on-rails


【解决方案1】:

第一个问题:您的模型内容错误。它属于迁移。此外,缺少activeprice 属性。而且我认为属性type 是受保护的。您应该将其重命名为 RoomType。

创建迁移:

rails g migration create_rooms room_type:string active:boolean price:integer

然后做rails db:migrate

第二期:

在您的控制器中,将步骤 2 中的代码更改为:

@rooms_type = Room.where(active: true, room_type: session[:loc_search]).order(:price)

您必须在文件中的任何位置将type 更改为room_type

【讨论】:

  • 进行了您建议的更改,但搜索页面仍然空白。我将更改的屏幕截图附在原始问题中(我只使用了卧室而不是房间类型)。我想念什么??是否可能与页面控制器中的 [:loc_search] 有关?我在课程中重复使用了它,但不确定它是否与 select_tag 搜索选项相关。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
相关资源
最近更新 更多