需要将 table 列的元素添加到 Rails 上的 Ruby 中的数组

Need to add elements of a table column to an array in Ruby on Rails

所以我正在开发一个涉及狗日托的 Rails 应用程序。我正在尝试做一个最终会帮助预订验证的助手,但现在我只是想让它 显示预订中的所有犬舍 table 并将这些名称放入数组中

这是我遇到的错误 error image

这是来自预订助手的代码:

module ReservationsHelper

  def available_kennels
    availability = Array.new

    @r.all.each do|kennel|
    availability.push(kennel)
    end

    return availability
  end
end

在预订控制器中,我将@r 分配给 reservation.all

这是控制器:

class ReservationsController < ApplicationController
  def new
    @reservation = Reservation.new
    @d = current_user.dogs
    @r = reservation.all
  end

  def create
    @reservation = current_user.reservations.build(r_params)

    if @reservation.save
      flash[:success] = "Reservation has been made"
    else
      render new
    end
  end

  def r_params
    params.require(:reservation).permit(:dog_id, :kennel_id, :startdate, :enddate, :status, :report)
  end

end

至于犬舍,唯一的 table 具有标准的 ID 和名称。

我知道我有点接近了。

预订是 class,因此需要大写。我还建议使用 reservations 而不是 r 作为变量。对于新加入的开发人员来说更容易阅读。希望这对您有所帮助:

reservations = Reservation.all

你的数组有点小应该是

@reservations.each do |reservation| // or @r in your case

在你的代码中 |kennel|实际上被用作个人保留而不是犬舍,因为我猜你想要。如果您的关系正确并且预订了 belongs_to 犬舍,您可以:

def available_kennels(@reservations)
  availability_array = []
  @reservations.each do |reservation|
    availability_array = availability_array.push(reservation.kennel.name)
  end 
  return availability_array 
end 

同样,我稍微更改了变量名称以帮助您了解发生了什么。当您将预订放入管道时,您就是在定义预订。要在 ruby 中定义数组,您只需执行 array = []。在这方面它与 javascript 有点不同。

如果您想在视图中获取列表,您还可以使用视图模板:

http://guides.rubyonrails.org/layouts_and_rendering.html

  <ul>
    @reservations.each do |reservation|
      <li>
        <%= reservation.kennel.name %>
      </li>
    end 
  </>ul