使用collection_select按user.id筛选表单中的下拉列表

时间:2017-08-13 16:14:00

标签: mysql ruby-on-rails ruby ruby-on-rails-4 collection-select

我的第一篇SO帖子。终于找到了让我难过的东西,经过6个多小时后,我决定在失去理智之前需要一些帮助。

我正在尝试将collection_select用于字段中的下拉列表,以在第二个模型中创建新记录。我的目标是从表单模型(共享数据库)中填写单个用户创建的记录列表,以便在名为Assets的新模型中创建记录。

我已将Accounts表单设置为存储创建条目的用户的自动生成记录ID,因此我应该能够以某种方式引用它。

此时数据会在下拉列表中填充并保存cab,但它会显示所有用户所做的所有条目,而不是仅显示创建新条目的用户所做的条目。

我确信有一些方法可以通过current_user.id进行过滤。我尝试了100个在网上找到的东西,当我返回一个代表我想要的用户ID的整数时,我能得到的最接近的是一个无效的参数错误。

表格标签:

<%= form.label :asset_location, id: :asset_asset_location %>
<%= collection_select(:asset, :asset_location_id, Account.all, :id, :account_name, {}, {:multiple => false}) %>

控制器标签:

  respond_to do |format|
  @asset.user_id = current_user.id if current_user
  if @asset.save
    format.html { redirect_to asset_path}
    format.json { render :show, status: :created, location: @asset }
  else
    format.html { render :new }
    format.json { render json: @asset.errors, status: :unprocessable_entity }
  end
end

我是Ruby / Rails的新手,并试图找出是否有更好的方法来过滤current_user.id下拉列表中填充的结果

我确实整晚都在这,并且不计划睡觉,直到它是正确的,所以任何帮助都将非常感激。哈哈哈

1 个答案:

答案 0 :(得分:1)

您应该能够使用accounts引用用户创建的current_user.accounts,因此只需将Account.all替换为current_user.accounts

<%= form.label :asset_location, id: :asset_asset_location %>
<%= collection_select(:asset, :asset_location_id, current_user.accounts, :id, :account_name, {}, {:multiple => false}) %>