导轨:在current_user上显示一个按钮,或显示其他消息(如果已经预订)



我是Ruby on Rails上的新手...

我想在我的应用程序页面上显示:如果尚未预订current_user为会议或显示信息,请按照" current_user"已预订会议预订,请按按钮" book a a a座位"。(只有管理员才能创建会议(

我正在使用设计..

我知道这并不难,但是我没有成功摆脱此功能。

预先感谢。

这是我的代码:

会议.html.erb:

  <% @meetings.each do |meeting| %>
  <div class="col-xs-12 col-sm-4">
    <div class="panel panel-default box-shadow">
      <div class="panel-body">
        <div class="col-xs-12 text-center">
          <strong><%= meeting.name %></strong>
          <br><%= meeting.details %><hr>
        </div>
        <div class="col-xs-12 text-center">
          <%= image_tag "place.png", heigth:15, width: 30 %> <strong><%= meeting.address %></strong><br>
          <%= image_tag "date.png", heigth:20, width: 45 %> <%= meeting.start_time.strftime("%d/%m/%Y") %>
          <hr>
          <% if user_signed_in? %>
          <% if meeting == current_user.meetings %>
          Already booked
          <% else %>
          <%= link_to "Book a seat", meeting_participate_path(meeting), method: :post, class: 'btn btn-md btn-info' %><br>
          <% end %>
          <% else %>
          <%- if controller_name != 'sessions' %>
          <%= link_to "connectez-vous", new_session_path(resource_name), class:"btn btn-info" %><br />
          <% end -%>
          <% end %>
        </div>
      </div>
    </div>
  </div>
<% end %>

会议controller.rb:

    def index
     @meetings = Meeting.where('start_time > ?', Time.now)
    end
  def create
    @meeting = current_user.meetings.create(meeting_params)
    if @meeting.save
      redirect_to meetings_path
    else
      render :new
    end
  end
  def participate
   meeting = Meeting.find(params[:meeting_id])
   current_user.meetings << meeting
   redirect_to meetings_path, alert: "Booked on the meeting"
 end
     private
    def set_meeting
      @meeting = Meeting.find(params[:id])
    end
    def meeting_params
      params.require(:meeting).permit(:name, :details, :address, :start_time, :highlight, :user_id)
    end

您可以通过以下步骤

来实现此目标

user.rb

#=> Check if already added?
def meeting_already_added?(id)
    meeting = Meeting.find(id)
    return false unless meeting
    user_meetings.where(meeting_id: meeting.id).exists?
end
#=> Pass id by following method
def can_book_meeting?(id)
    !meeting_already_added?(id)
end

meetings.html.erb

<% if user_signed_in? %> # Check user signed in?
    <% if current_user.can_book_meeting?(meeting.id) %> # current_user added already? if not then...
        <%= link_to "Book a seat", meeting_participate_path(meeting), method: :post, class: 'btn btn-md btn-info' %><br>
    <% else %>
        Already booked
    <% end %>
<% else %> # Not signed in
    Please SignIn
<% end %>

通过在控制器顶部添加此行来添加该行以对用户进行身份验证的限制。

before_action :authenticate_user!, only: [:create, :participate]

最新更新