acts_as_state_machine 辅助方法 rails 6
acts_as_state_machine helper method rails 6
我的预订模型中有已验证和未验证状态,如何为我的视图实现辅助方法?我希望在我的索引视图中有这样的内容。
<% @bookings.each do |booking| %>
<%= link_to booking_path(booking) do %>
<%= booking.name %>
<% if verified_booking %>/* here is where i want implemented*/
<div class="pt-4 font-semibold"><i class="fa fa-user-check"></i></div>
<% end %
<% end %>
</div>
<% end %>
辅助方法
def verified_booking
!!Booking.verified
end
预订模式
include AASM
aasm :column => :state, :whiny_transitions => false do
state :unverified, initial: true
state :verified
event :verify do
transitions from: [:unverified], to: :verified
end
end
ApplicationHelper.rb
def verified_booking(state)
# check state in the database if it is verified
# return true if state is verified
# return false if not verified
end
html.erb
<% @bookings.each do |booking| %>
<%= link_to booking_path(booking) do %>
<%= booking.name %>
<% if verified_booking(booking.state) %>/* here is where i want implemented*/
<div class="pt-4 font-semibold"><i class="fa fa-user-check"></i></div>
<% end %
<% end %>
</div>
<% end %>
编辑
删除了示例 AASM 定义,因为您将自己的定义添加到了问题中。
AASM 将为您定义的每个状态定义 public 个实例方法,您可以使用这些方法来检查您的状态。因此,在您的情况下,您的实例将有 .verified?
和 .unverified?
方法。你可以直接在视图中使用这些方法,所以你真的不需要辅助方法:
<% @bookings.each do |booking| %>
<%= link_to booking_path(booking) do %>
<%= booking.name %>
<% if booking.verified? %>
<div class="pt-4 font-semibold"><i class="fa fa-user-check"></i></div>
<% end %>
<% end %>
</div>
<% end %>
但是,如果您想了解为什么您的问题中的辅助方法不起作用,您在问题中提供的辅助方法将不起作用,原因有两个。您调用 Booking.verified
但 Booking
是 class 并且 AASM 方法是实例方法(也就是说,它们仅在调用 实例 时有效Booking
。您需要将视图中的单个预订实例作为参数传递给它(正如@gordon 在他们的回答中所说)。第二个问题是方法是 .verified?
(问号是部分方法名称)。因此:
def verified_booking(booking)
booking.verified?
end
我的预订模型中有已验证和未验证状态,如何为我的视图实现辅助方法?我希望在我的索引视图中有这样的内容。
<% @bookings.each do |booking| %>
<%= link_to booking_path(booking) do %>
<%= booking.name %>
<% if verified_booking %>/* here is where i want implemented*/
<div class="pt-4 font-semibold"><i class="fa fa-user-check"></i></div>
<% end %
<% end %>
</div>
<% end %>
辅助方法
def verified_booking
!!Booking.verified
end
预订模式
include AASM
aasm :column => :state, :whiny_transitions => false do
state :unverified, initial: true
state :verified
event :verify do
transitions from: [:unverified], to: :verified
end
end
ApplicationHelper.rb
def verified_booking(state)
# check state in the database if it is verified
# return true if state is verified
# return false if not verified
end
html.erb
<% @bookings.each do |booking| %>
<%= link_to booking_path(booking) do %>
<%= booking.name %>
<% if verified_booking(booking.state) %>/* here is where i want implemented*/
<div class="pt-4 font-semibold"><i class="fa fa-user-check"></i></div>
<% end %
<% end %>
</div>
<% end %>
编辑 删除了示例 AASM 定义,因为您将自己的定义添加到了问题中。
AASM 将为您定义的每个状态定义 public 个实例方法,您可以使用这些方法来检查您的状态。因此,在您的情况下,您的实例将有 .verified?
和 .unverified?
方法。你可以直接在视图中使用这些方法,所以你真的不需要辅助方法:
<% @bookings.each do |booking| %>
<%= link_to booking_path(booking) do %>
<%= booking.name %>
<% if booking.verified? %>
<div class="pt-4 font-semibold"><i class="fa fa-user-check"></i></div>
<% end %>
<% end %>
</div>
<% end %>
但是,如果您想了解为什么您的问题中的辅助方法不起作用,您在问题中提供的辅助方法将不起作用,原因有两个。您调用 Booking.verified
但 Booking
是 class 并且 AASM 方法是实例方法(也就是说,它们仅在调用 实例 时有效Booking
。您需要将视图中的单个预订实例作为参数传递给它(正如@gordon 在他们的回答中所说)。第二个问题是方法是 .verified?
(问号是部分方法名称)。因此:
def verified_booking(booking)
booking.verified?
end