我有一个Rails应用程序,显示了具有不同参数的餐馆列表。我试图通过复选框添加过滤器,以便在用户选中复选框时,该视图仅显示餐馆被Zagat评级的帖子。
我的代码如下。为什么它不起作用?
POSTS INDEX FILE(INDEX.HTML.ERB)
<script type="javascript">
function sendData() {
$.post( "index",{'zagat_status':$('#zagat_status'.val("")})
.done(function(data) {
alert('Success!');
});
}
$(document).ready(function() {
$('#zagat_status').change(function() {
sendData();
});
});
</script>
<label> Zagat<dd>rated</dd><input type="checkbox" name="zagat_status" value="Yes">
</label>
POSTS CONTROLLER
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
# GET /posts
# GET /posts.json
def index
@posts = Post.all
if params[:search]
@posts = @posts.search(params[:search]).order("created_at DESC")
end
if params[:zagat_status].present?
@posts = @posts.zagat_status(params[:zagat_status]).order("created_at DESC")
end
end
帖子模型
scope :zagat_status, -> (zagat_status) { where zagat_status: zagat_status }
答案 0 :(得分:0)
您确定要为复选框获取正确的值吗?如果你放行
raise params.to_s
在索引函数的开头,是否发送了你想要的参数?这将有助于确定问题是在javascript端(最有可能)还是在rails服务器端。
我最近遇到了类似的问题
$('#zagat_status').val()
没有给我我想要的价值。尝试使用下面的代码段,在其中调用($(this).is(':checked'))
以查看是否选中了复选框并将其传递给控制器。
$('#zagat_status').change(function(){
var isChecked = ($(this).is(':checked'))
$.post( "index",{'zagat_status': isChecked })
.done(function(data) {
alert('Success!');
});
})