如何根据选中的选项显示文本数组?
How can show text array according options checked?
我正在尝试根据选中的复选框显示文本。
我有 3 个状态,所以当我选中一个或两个复选框时,会显示未选中的选项 javascript。
例如:
if I check1 will show me the text active.
if I check2 will show me the text inactive.
if I check3 will show me the text inactive and active.
if I check1 and check 2 will show me the text "active","inactive".
if I check1 and check 2 will show me the text "active","removed".
if I check1 and check 2 will show me the text "removed","inactive".
根据选中的复选框保留文本。
这是控制器:
@search_state = params[:search_state]
@people = Person.all
视图如下:
<%= form_tag(people_path,:method => "get") do %>
#### BEGIN CHECKBOX #####
<% if @search_state.blank? %>
Check1 <%= check_box_tag "search_state[]", "0" %>
Check2 <%= check_box_tag "search_state[]", "1" %>
Check3 <%= check_box_tag "search_state[]", "2" %>
<% else %>
Check1 <%= check_box_tag "search_state[]", "0", @search_state.collect(&:to_i).include?(0) %>
Check2 <%= check_box_tag "search_state[]", "1", @search_state.collect(&:to_i).include?(1) %>
Check3 <%= check_box_tag "search_state[]", "2", @search_state.collect(&:to_i).include?(2) %>
<% end %>
#### END CHECKBOX ####
### WANT TO SHOW A TEXT ACCORDING CHECKBOXES SELECTED ###
<% if @search_state.to_s=="0"%>
Active
<% elsif @search_state.to_s=="1"%>
Inactive
<% elsif @search_state.to_s=="2" %>
Removed
<% elsif @search_state.to_s==["0","1"] %>
Active,Inactive
<% elsif @search_state.to_s==["0","2"] %>
Active,Removed
<% elsif @search_state.to_s==["1","2"] %>
Inactive,Removed
<% elsif @search_state.to_s==["0","1","2"] %>
Active,Inactive,Removed
<% end %>
### END WANTTO SHOW A TEXT ACCORDING CHECKBOXES SELECTED ###
<% end %>
这里是文件和演示:
http://runnable.com/VMkReiHVr0FbfQKN/checkbox-project-test-for-ruby-on-rails
http://runnable.com/VMkRe1xPNqFWSMtd/output
我的代码太长了,我认为这不是正确的做法。
例如在这种情况下我有 3 个状态,如果我有更多状态会太长和混乱。
有人可以帮我在 rails 上使用 ruby 制作复选框而不需要几行代码吗?
我知道使用 Javascript 是解决方案,但这是唯一的解决方案吗?请问如何解决?
非常感谢您提供的所有帮助。
我很难从你的例子中理解你想要它做什么。但我认为你的意思是按钮 1 是 "Active",按钮 2 是 "Inactive",按钮 3 是 "Removed"。此外,我认为您打算没有选项是相互排斥的......特别是,您可以同时检查 "Active" 和 "Inactive" 。您还暗示将来可能会有更多具有类似行为的复选框。
如果所有这些都是正确的,那么我同意,您当前的方法根本无法很好地扩展。
我不会尝试 select 基于复杂标准的完整消息,而是重构它以从其组件构建消息。按照这些思路应该可以让您到达那里:
flags = []
flags << 'Active' if @search_state.collect(&:to_i).include?(0)
flags << 'Inactive' if @search_state.collect(&:to_i).include?(1)
flags << 'Removed' if @search_state.collect(&:to_i).include?(2)
puts flags.join(', ')
FWIW,如果您没有理由为所有复选框赋予相同的名称和不同的值,我会给每个复选框一个不同的名称。这将使您的许多代码更加简单。沿着这些线的东西:
Check1 <%= check_box_tag "search_active", "1", @search_active == 1) %> Active
Check2 <%= check_box_tag "search_inactive", "1", @search_inactive == 1) %> Inactive
Check3 <%= check_box_tag "search_removed", "1", @search_removed == 1) %> Removed
如果您确实需要将它们放在一个数组中,您稍后可以很容易地将它们连接在一起。
我正在尝试根据选中的复选框显示文本。
我有 3 个状态,所以当我选中一个或两个复选框时,会显示未选中的选项 javascript。
例如:
if I check1 will show me the text active.
if I check2 will show me the text inactive.
if I check3 will show me the text inactive and active.
if I check1 and check 2 will show me the text "active","inactive".
if I check1 and check 2 will show me the text "active","removed".
if I check1 and check 2 will show me the text "removed","inactive".
根据选中的复选框保留文本。
这是控制器:
@search_state = params[:search_state]
@people = Person.all
视图如下:
<%= form_tag(people_path,:method => "get") do %>
#### BEGIN CHECKBOX #####
<% if @search_state.blank? %>
Check1 <%= check_box_tag "search_state[]", "0" %>
Check2 <%= check_box_tag "search_state[]", "1" %>
Check3 <%= check_box_tag "search_state[]", "2" %>
<% else %>
Check1 <%= check_box_tag "search_state[]", "0", @search_state.collect(&:to_i).include?(0) %>
Check2 <%= check_box_tag "search_state[]", "1", @search_state.collect(&:to_i).include?(1) %>
Check3 <%= check_box_tag "search_state[]", "2", @search_state.collect(&:to_i).include?(2) %>
<% end %>
#### END CHECKBOX ####
### WANT TO SHOW A TEXT ACCORDING CHECKBOXES SELECTED ###
<% if @search_state.to_s=="0"%>
Active
<% elsif @search_state.to_s=="1"%>
Inactive
<% elsif @search_state.to_s=="2" %>
Removed
<% elsif @search_state.to_s==["0","1"] %>
Active,Inactive
<% elsif @search_state.to_s==["0","2"] %>
Active,Removed
<% elsif @search_state.to_s==["1","2"] %>
Inactive,Removed
<% elsif @search_state.to_s==["0","1","2"] %>
Active,Inactive,Removed
<% end %>
### END WANTTO SHOW A TEXT ACCORDING CHECKBOXES SELECTED ###
<% end %>
这里是文件和演示:
http://runnable.com/VMkReiHVr0FbfQKN/checkbox-project-test-for-ruby-on-rails
http://runnable.com/VMkRe1xPNqFWSMtd/output
我的代码太长了,我认为这不是正确的做法。
例如在这种情况下我有 3 个状态,如果我有更多状态会太长和混乱。
有人可以帮我在 rails 上使用 ruby 制作复选框而不需要几行代码吗?
我知道使用 Javascript 是解决方案,但这是唯一的解决方案吗?请问如何解决?
非常感谢您提供的所有帮助。
我很难从你的例子中理解你想要它做什么。但我认为你的意思是按钮 1 是 "Active",按钮 2 是 "Inactive",按钮 3 是 "Removed"。此外,我认为您打算没有选项是相互排斥的......特别是,您可以同时检查 "Active" 和 "Inactive" 。您还暗示将来可能会有更多具有类似行为的复选框。
如果所有这些都是正确的,那么我同意,您当前的方法根本无法很好地扩展。
我不会尝试 select 基于复杂标准的完整消息,而是重构它以从其组件构建消息。按照这些思路应该可以让您到达那里:
flags = []
flags << 'Active' if @search_state.collect(&:to_i).include?(0)
flags << 'Inactive' if @search_state.collect(&:to_i).include?(1)
flags << 'Removed' if @search_state.collect(&:to_i).include?(2)
puts flags.join(', ')
FWIW,如果您没有理由为所有复选框赋予相同的名称和不同的值,我会给每个复选框一个不同的名称。这将使您的许多代码更加简单。沿着这些线的东西:
Check1 <%= check_box_tag "search_active", "1", @search_active == 1) %> Active
Check2 <%= check_box_tag "search_inactive", "1", @search_inactive == 1) %> Inactive
Check3 <%= check_box_tag "search_removed", "1", @search_removed == 1) %> Removed
如果您确实需要将它们放在一个数组中,您稍后可以很容易地将它们连接在一起。