【问题标题】:Rails - Show objects related to user in form dropdownRails - 在表单下拉列表中显示与用户相关的对象
【发布时间】:2018-07-17 08:04:20
【问题描述】:

在我的 rails 应用程序中存在以下关系: user belongs_to :team , element belongs_to :team , task belongs_to :element

然后用户可以创建属于某个元素的任务。 当用户创建任务时,他们可以选择他们希望任务所属的元素。如何仅显示属于 current_user 团队的元素?我正在使用 Devise 获取current_user

以下示例不起作用。

  <div class="field">
    <%= form.label :element_id %>
    <%= form.select :element_id, options_for_select(Element.current_user.team_id.map{|s|[s.title, s.id]}),{ :multiple => true} %>
  </div>

我也尝试从tasks_controller.rb 文件中调用下面的方法,但它也不起作用

  def new
    @task = Task.new
    @tasks_element_dropdown = Element.current_user.team_id.map{|s|[s.title, s.id]}
  end

tasks/_form.html.erb文件中,我用下面的代码调用了方法

<%= form.select :element_id, options_for_select(@tasks_element_dropdown),{ :multiple => true} %>

当我尝试下面的示例时,它确实有效,但它显示了所有元素,我只希望显示属于用户团队的元素

  <div class="field">
    <%= form.label :element_id %>
    <%= form.select :element_id, options_for_select(Element.all.map{|s|[s.title, s.id]}),{ :multiple => true} %>
  </div>

【问题讨论】:

    标签: ruby-on-rails ruby devise associations relationship


    【解决方案1】:

    问题出在以下代码中,它应该返回elements

    Element.current_user.team_id.map{|s|[s.title, s.id]}
    

    既然你有user,你可以得到团队:current_user.team 然后得到teamelements(只要has_many :elementsTeam类中定义):current_user.team.elements

    因此,最终的代码应该是这样的:

    <div class="field">
      <%= form.label :element_id %>
      <%= form.select :element_id, options_for_select(current_user.team.elements.map{ |s| [s.title, s.id] }),{ :multiple => true} %>
    </div>
    

    【讨论】:

    • 就是这样!它现在正在工作 - 非常感谢!我还不能投票,所以暂时发表评论。
    猜你喜欢
    • 2019-04-27
    • 2020-07-25
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多