我正在尝试从控制器的HTML选择输入中获取值,以便我可以在条件erb代码段中使用它
这是下拉菜单的 html 代码段
<select id="select" name="parish" class="form-control" onchange="choice(this.value)">
<option value="">--Select value--</option>
<option value="test">test</option>
<option value="two">2</option>
</select>
我被告知使用 AJAX 来传递值
function choice(value) {
console.log(value)
$.ajax({
url: '/tickets/index',
type: 'GET',
data: {
parish: $('#select').val()
}
/*success:function() {
body...
}*/
})
}
我的票务控制器看起来像这样:
def index
@ticket = Ticket.all;
@value = params[:parish]
puts @value
end
这是条件erb
,如您所见,它被设置为使用控制器中的变量,但它不起作用,但是如果我用硬编码字符串替换@value
它就可以工作,puts @value
在控制台中显示该值,因此它不为空。我做错了什么?
<% @ticket.where(parish: @value).each do |ticket| %>
问题不在于@value
,而在于您在视图中使用的查询。此<% @ticket.where(parish: @value).each do |ticket| %>
是错误的@ticket
因为 ActiveRecord 集合而不是 ActiveRecord模型,因此它不起作用。你应该做
<% Ticket.where(parish: @value).each do |ticket| %>
但这不是在视图中进行查询的优雅方式,该查询将进行数据库调用,还要记住@value
取决于我会做的params[:parish]
def index
unless params[:parish].nil?
@tickets = Ticket.where(parish: params[:parish])
else
@tickets = Ticket.all
end
respond_to do |format|
format.html
format.js
end
end
并在视图中
<% @tickets.each do |ticket| %>