在我的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>
答案 0 :(得分:0)
问题出在以下代码中,该代码应返回elements
:
Element.current_user.team_id.map{|s|[s.title, s.id]}
由于您拥有user
,因此可以得到团队:current_user.team
然后获取elements
中的team
(只要在has_many :elements
类中定义了Team
):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>