生成时间表脚手架。然后又创建了一个新动作" clas"在我的timetables_controller.rb。
timetables_controller.rb
class TimetablesController < ApplicationController
before_action :set_timetable, only: [:show, :edit, :update, :destroy, :clas]
def clas
@classtimetable = Timetable.where(params[:clas])
end
//other actions
def set_timetable
@timetable = Timetable.find(params[:id])
end
def timetable_params
params.require(:timetable).permit(:day, :clas, :one_teacher, :one_sub, :two_teacher, :two_sub, :three_teacher, :three_sub, :four_teacher, :four_sub, :five_teacher, :five_sub, :six_teacher, :six_sub, :seven_teacher, :seven_sub, :eight_teacher, :eight_sub)
end
end
为行动创建了form_for&#34; clas&#34;。需要将select选项值作为参数传递给控制器
clas.html.erb
<% form_for @classtimetable, :url => clas_timetables_path, :html => { :method => :post} do |f| %>
<div class="field">
<%= f.label "Select class" %>
<% values = ["1c", "2c", "3c", "4d", "5i"] %>
<%= f.select :clas, options_for_select(values) %>
</div>
<div class="actions">
<%= f.submit "Submit"%>
</div>
<% end %>
<% @classtimetable.each do |class_timetable| %>
<%= class_timetable.day %>
<% end %>
的routes.rb
resources :timetables do
member do
get 'clas'
end
end
我需要在clas.html.erb页面中全天获取课程。这是通过从下拉列表中选择类并提交来完成的。单击“提交”时,该值应以参数传递。 不知道如何解决它。有什么想法吗?
答案 0 :(得分:2)
在form_for
标记
<% form_for @classtimetable, :url => { :controller => "your-controller-name", :action => :clas } do |f| %>
或者你可以直接这样写,
<% form_for @classtimetable, :url => clas_timetables_path, :html => { :method => :post} do |f| %>
更改before_action
之类的,
before_action :set_timetable, only: [:show, :edit, :update, :destroy, :clas]
您可以将collection
更改为member
并传递id
resources :timetables do
member do
get 'clas'
end
end
答案 1 :(得分:0)
尝试像这样更改form_tag
,
<% form_for @classtimetable, :url => clas_timetables_path(@classtimetable), :method => :post do |f| %>
答案 2 :(得分:0)
你能试试吗
$select[]=$selected;
答案 3 :(得分:0)
首先我认识到:你在路线中使用了get,并以形式发布。所以行动不匹配。 第二:你写过:
对于Timetable :: ActiveRecord_Relation仍然得到相同的错误未定义方法`model_name':Class
那么看,你如何定义@classtimetable
@classtimetable = Timetable.where(params[:clas])
这是一个关系,而不是你想通过clas找到的ActiveRecord。错误将在此行中抛出:
<% form_for @classtimetable, :url => clas_timetables_path, :html => { :method => :post} do |f| %>
form_for期望第一个参数是ActiveRecord或类似的东西(至少扩展ActiveModel :: Naming的东西)。由于我没有看到你对时间表的定义,我只是猜测,它有一个名为clas的属性,你想要找到带有clas的时间表等于该表格中的选择。所以它会是:
@classtimetable = Timetable.find_by(clas: params[:clas])
与...相同:
@classtimetable = Timetable.where(clas: params[:clas]).first
要从该Relation获取第一个元素,您尝试使用。
第三:由于你确定你的路由是一个成员路由,它应该在clas_timetable_path中期望一个id。由于你在before_filter中的clas动作中加载了@timetable,我想你想拥有:
<% form_for @classtimetable, :url => clas_timetables_path(@timetable), :html => { :method => :get} do |f| %>