不确定如何获得ID

时间:2014-12-16 21:34:05

标签: ruby-on-rails

Alrighty。

所以我相信我的问题很简单,但出于某种原因,我似乎无法弄明白。

我希望用户能够申请旅游预订。然后获取user_id和它正在请求巡视的tour_id。我成功地获得了user_id,但不知道如何获取tour_id。

以下是我的控制器的外观:

class TourRequestsController < ApplicationController
  def create
    @tour_request = current_user.tour_requests.new(tour_request_params)
    if @tour_request.save
      flash[:success] = "You've requested a tour booking"
      redirect_to :back
    else
      flash[:error] = 'Unable to request a tour'
      redirect_to :back
    end
  end

  private 

  def tour_request_params
    params.require(:tour_request).permit(:tour_id, :user_id, :date)
  end
end

你可以看到user_id是通过current_user获得的。我试过添加这样的合并:

tour_request_params(tour_id => Tour.id / @tour.id / tour_path(tour.id) 

等,但它不起作用。我知道我可以添加一个隐藏的html字段,但是我希望尽可能安全,因此你不能篡改数据。

关联是游览属于用户,用户有很多游览。

您可以申请参观游览/显示表格如下:

<%= form_for TourRequest.new do |f| %>
  <%= f.text_field :date, id: 'datetimepicker', autocomplete: 'off', placeholder: 'dd.mm.yyyy' %>
  <%= f.submit 'Request a tour', class: 'btn btn-primary' %>
<% end %>

我如何做到这一点,以便在我提交旅游预订请求时获得旅游ID?

2 个答案:

答案 0 :(得分:0)

您有2个选项之一:

  1. 将游览ID作为表单属性或路径上的参数
  2. 传递给控制器
  3. 将巡视ID保存在呈现巡回请求表单的控制器操作中的会话中
  4. 无论哪种情况,您都需要在某个时刻从客户端将游览ID传递给服务器。

答案 1 :(得分:0)

我认为id应该可用,即在保存之后非零。

  def create
    @tour_request = current_user.tour_requests.new(tour_request_params)
    puts "id = #{@tour_request.id}"  # should be nil
    if @tour_request.save
      puts "id = #{@tour_request.id}"  # should be non-nil
      flash[:success] = "You've requested a tour booking"
      redirect_to :back
    else
      flash[:error] = 'Unable to request a tour'
      redirect_to :back
    end
  end