我有一个包含多列的表格。一个是布尔值。我在我的控制器中有这个:
def index
@matchings = Matching.where(match: '1')
end
我只想让“匹配”列的对应值为1,因为通常值为“0”的行并不重要。但是,我想知道是否有办法切换视图而无需进入控制器并每次都编辑def index
。
有什么想法吗?
答案 0 :(得分:1)
只需使用查询字符串即可。每当你想用
加载它match: '1'
添加
?match=1
到请求以及随时随地
match: '0'
添加
?match=0
到请求。例如:
/some/index/page?match=1
或
/some/index/page?match=0.
然后在控制器中使用:
def index
@matchings = Matching.where(match: match)
end
private
def match
params.require(:match) # reads the value of the `match` param in the query string
end
为了它的价值,您可以编写迁移来创建布尔列。 (TINYINT
在大多数SQL数据库中。)使用它,您的查询可以更改为
Matching.where(match: true||false)
为此目的更有意义。
另外,我会避免完全命名列"match"
。 match
是一种经常使用的Ruby方法,最好避免使用类似的常用方法名称。
答案 1 :(得分:1)
如果您只是想手动切换,只需输入
即可localhost:3000/controllername/index?match=0
或
localhost:3000/controllername/index?match=1
如果你想从你的视图中添加它,你可以制作一个这样的表格
<form class="smart-form">
<fieldset>
<section class="col col-3">
<label class="label font-sm">Toggle view</label>
<select class="form-control input-sm" name= "match">
<option value="0">View 1</option>
<option value="1">View 2</option>
</select><i></i>
</section>
</fieldset>
<footer>
<button type="submit" class="btn btn-primary">Submit</button>
</footer>
</form>
并在您的控制器中输入以下内容
def index
@matchings = Matching.where(:match => params[:match])
end
我认为匹配是你模型中定义的东西。 谢谢