如何在视图中获取关联的模型属性值? Rails

How to get assocated model's attribute values in views ? Rails

我有三个模型...

models/resident.rb

class Resident < ActiveRecord::Base
  belongs_to :hostel
  has_many :leaves,dependent: :delete_all
  has_one :user,dependent: :delete
end

models/user.rb

class User < ActiveRecord::Base
  belongs_to :resident
end

models/leave.rb

class Leave < ActiveRecord::Base
  belongs_to :resident
end

现在,当我试图在 views/leave/show.html.erb 中访问 leave 属性的值时 我得到这个:

app/views/leaves/show.html.erb

<%= @leaves %>

在浏览器中输出:

#<Leave::ActiveRecord_Associations_CollectionProxy:0x007fde611850f0> 

我的休假控制器看起来像: leaves_controller.rb

class LeavesController < ApplicationController

  def new
    if logged_in?
       @leave=Leave.new
    else
      flash[:info]="Please login to mark a leave"
      redirect_to root_path
    end
  end
   def show
     @leaves= current_user.resident.leaves
   end

  def create
    @leave=current_user.resident.leaves.create(leave_params)
    if @leave.save
      flash[:info] = "Leave successfully marked"
      redirect_to new_leave_path
    else
      flash[:danger] = "Something wrong Happened try again"
      redirect_to root_path
    end
  end

  private
  def leave_params
    params.require(:leave).permit(:start_date,:end_date,:destination)
  end
end

我是否为居民和相关用户制作了正确的叶子(创建方法)

显示方法是否正确?

以及如何在 中显示用户的叶子属性。html.erb 叶子视图。

你做的一切都很好,show 方法也很好,模板准确地显示了被告知要显示的内容。

@leaves是一个集合。你可能想展示它的元素?这应该会导致正确的解决方案:

<% @leaves.each do |l| %>
  <%= l.inspect %>
<% end %>

A Resident has_many 留下 current_resident.leaves returns 所有 current_resident 的叶子的数组。您将需要遍历叶子以显示各个属性。尝试

@leaves.first.attribute_name 

在您看来,了解数据的表示方式。要显示所有叶子,您需要在视图中使用循环

@leaves.each do |leave|
  leave.inspect
end