Что в настоящее время работает:
В моем методе BookingsController # Index у меня есть это
def index
@user = current_user
if @user.user_type == 'host'
@bookings = Booking.where(host_id:@user.id, status: "#{params[:status]}")
else @user.user_type == 'cleaner'
@bookings = Booking.where(cleaner_id:@user.id, status: "#{params[:status]}")
end
end
Это устанавливает текущего пользователя и определяет, какие @bookings
для отображение в зависимости от user_id и params.
В представлениях, в моем файле index.html.erb
, я отображаю заказы <%= render @bookings %>
, которые я определил в booking#index
. У меня есть партиал _booking.html.erb
, который обрабатывается ... Внутри партиала _booking.html.erb
я могу успешно вернуть детали бронирования, например, например,
<div id='booking-time'><b>Unit Name:</b> <%= booking.unit.name %></div>
вернет имя устройства. он распознает локальную переменную booking
и поля, которые к ней относятся.
Я хотел бы выполнить рефакторинг:
Я хочу реорганизовать это и сделать частичный <%= render 'bookings/booking' %>
в моем файле index.html.erb
. Этот фрагмент будет отображать различные вспомогательные методы, которые каждый из них направляет к различным частям.
В настоящее время мой файл _booking.html.erb
содержит несколько условных логик c, которые лучше подходят для помощника ... Я пробовал несколько разных способов выполнения sh, но безрезультатно, обычно из-за неопределенных переменных. Какой элегантный способ выполнить sh это?
Что я пробовал:
Вот метод из моего bookings_helper.rb `file:
def incoming_to_cleaner_partial_path(bookings)
return unless booking.status=='pending' && current_user.user_type =='cleaner' && booking.requested_by_id != current_user.id
'bookings/booking_requests/incoming_to_cleaner'
end
Я добавил logi c к этим методам, чтобы определить, какие части визуализировать.
в моем измененном файле _booking.html.erb
, я вызываю эти методы, я передаю им @bookings
параметр переменной экземпляра.
<%= render incoming_to_cleaner_partial_path(@bookings) %>
Я также пробовал это без параметров .. Ни работа ..
наконец, я пытался вызвать метод determine_bookings_to_show
внутри вспомогательных методов. Этот метод содержит те же логики c от контроллера ...
def incoming_to_cleaner_partial_path
determine_bookings_to_show
return unless booking.status=='pending' && current_user.user_type =='cleaner' && booking.requested_by_id != current_user.id
'bookings/booking_requests/incoming_to_cleaner'
end
private
def determine_bookings_to_show
@user = current_user
if @user.user_type == 'host'
@bookings = Booking.where(host_id:@user.id, status: "#{params[:status]}")
else @user.user_type == 'cleaner'
@bookings = Booking.where(cleaner_id:@user.id, status: "#{params[:status]}")
end
end
Моя главная проблема - у меня проблемы с областью действия с этими частями ...