Rails - 在表单下拉列表中显示与用户相关的对象
Rails - Show objects related to user in form dropdown
在我的 rails 应用程序中存在以下关系:
user belongs_to :team
,
element belongs_to :team
,
task belongs_to :element
然后用户可以创建属于某个元素的任务。
当用户创建任务时,他们可以 select 他们希望任务所属的元素。如何只显示属于 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>
问题出在下面的代码中,应该return elements
:
Element.current_user.team_id.map{|s|[s.title, s.id]}
既然你有一个user
,你可以得到球队:current_user.team
然后得到team
的elements
(只要在Team
class中定义了has_many :elements
):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>
在我的 rails 应用程序中存在以下关系:
user belongs_to :team
,
element belongs_to :team
,
task belongs_to :element
然后用户可以创建属于某个元素的任务。
当用户创建任务时,他们可以 select 他们希望任务所属的元素。如何只显示属于 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>
问题出在下面的代码中,应该return elements
:
Element.current_user.team_id.map{|s|[s.title, s.id]}
既然你有一个user
,你可以得到球队:current_user.team
然后得到team
的elements
(只要在Team
class中定义了has_many :elements
):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>