如何在Rails中使用“where”切换索引视图

时间:2017-03-24 21:24:39

标签: html ruby-on-rails ruby sqlite

我有一个包含多列的表格。一个是布尔值。我在我的控制器中有这个:

def index
  @matchings = Matching.where(match: '1')
end

我只想让“匹配”列的对应值为1,因为通常值为“0”的行并不重要。但是,我想知道是否有办法切换视图而无需进入控制器并每次都编辑def index

有什么想法吗?

2 个答案:

答案 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

我认为匹配是你模型中定义的东西。 谢谢