Closed 5663015 closed 7 years ago
大致明白你的意思了,你的那些筛选内容应该用form_for构造成表单,点击筛选按钮,提交表单到rails里的course控制中list方法(或者index),在这个方法里取出提交的信息,用where方法在Course类里筛选出来,将筛选的结果传回list方法的视图,这个时候列举出来的课程都是筛选过的
就跟点击开课按钮后,能看到所有的开课课程一样,这里点击后,还传入了其他参数,经过rails的处理返回了符合要求的所有课程
刚才插入代码有点问题,现在看到的代码应该是form_for构造表单吧
还有,我看网上教程里,比如这句 < option value="">默认选择< /option>,value的作用是什么?
<option value ="2">40/2.0</option>
如果你选了40/2.0这个选项,提交后的值为2
哦哦,那怎么把选择的40/2.0这个选项赋给course的credit呢?
用select方法
<%= form_for @user, html: {class: 'form-horizontal', role: 'form'} do |f| %>
....
<%= f.label :role, class: 'col-sm-3 control-label' %>
<div class="col-sm-8">
<%= f.select :role, options_for_select(['undergraduate', 'master', 'doctor', 'lecturer', 'associate professor', 'professor', 'executive staff']), {}, class: 'form-control' %>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-9">
<%= f.submit class: "btn btn-success" %>
<%= link_to "Cancel", @user.new_record? ? root_path : user_path(@user), :class => "btn btn-default" %>
</div>
</div>
<% end %>
role是user的一个字段,在这里你应该填:credit,后面的就是各种选项了,提交后的值就是选择的值
我现在是做到这种程度了: 视图:
`< %= select_tag "credit", options_for_select([['40/2.0', '40/2.0'],
['60/3.0', '60/3.0']]) % >
< div class="form-group" style="float:hidden">
 
< %=link_to "筛选", list_courses_url(:credit),class: 'btn btn-xs btn-info' %>
 
< %=link_to "刷新", refresh_course_url(@course),class: 'btn btn-xs btn-info' %>
< /div>`
控制:
` def list
@course_filter=Course.where(:credit).all
@course=@course-current_user.courses
……`
错误如下:
你这个where参数都不传的啊
https://github.com/PENGZhaoqing/CourseSelect/issues/56
正确的应该是用params[:course][:credit]
把获得的参数传入where方法
我试了多种还是有错……(⊙﹏⊙)
`@course=Course.where("credit = ? AND course_type =? AND teaching_type =? AND exam_type =?", params[:credit],params[:course_type],params[:teaching_type],params[:exam_type])`
`@course=Course.where( :credit => params[:credit] , :course_type => params[:course_type] , :teaching_type => params[:teaching_type] , :exam_type => params[:exam_type]).all`
params用错了,params是一个至少两层以上的hash,你要获得的参数在course下面,例如params[:course][:credit]
(我上面写的你都不看的啊)
不确定的情况下,使用puts params[:course][:credit]
,把这个变量在log里打印出来看到底有没有
别一开始啪的以下就把所有参数都往里塞
应该是先从Course.where( :credit => params[:course][:credit])
开始,如果这个结果对了再加下一个参数如:Course.where( :credit => params[:course][:credit]).where(:exam_type => params[:course][:exam_type])
,
不然这么多参数都往里传,debug的时候一个错了全都不能运行,推荐官方写法
http://guides.rubyonrails.org/active_record_querying.html
还有你这个错误(Missing Templates)好像是没找到视图的错误
哦哦我再试试。实在不好意思,问你这么多,麻烦你啦~
助教你好,请问上面提到的用这种方法,是在选项中显示40/2.0,那么选中之后,如何将其对应的value值传到credit中呢?
选中之后,用户点击提交,那么这个form表单的这个字段就会被提交到rails控制器里,在控制器里将这个字段取出来就行了
界面大致如下: 拿“学时/学分”选项和按钮代码示例:
实际上只要加入