【发布时间】:2019-02-02 12:59:50
【问题描述】:
这是一个学校项目,目前我只知道 Ruby、Sinatra、HTML 和 CSS。我在网上查看过,但只遇到了 PHP 和 Javascript 指令(我不应该使用它们)。
我有一个复选框表单,虽然我可以勾选多个,但只有一个复选框值被发布。我如何获得它以便所有已选中的都通过?
此外,每个州的“缩写”都为零。我在表格中做错了吗?如果有的话,它只是使用其中一个缩写并将其添加到每个州。最后,我该如何做到这一点,以便复选框仍然选中用户过去已经添加的状态?
这里有一些代码:
<form method="POST" action="/states">
<h3>Northeast:</h3> <br>
<input type="checkbox" name="state_name" value="Connecticut" name="abbreviation" value="CT"> Connecticut<br>
<input type="checkbox" name="state_name" value="Deleware" name="abbreviation" value="DE"> Deleware <br>
<input type="checkbox" name="state_name" value="Maine" name="abbreviation" value="ME"> Maine<br>
<input type="checkbox" name="state_name" value="Maryland" name="abbreviation" value="MD"> Maryland<br>
require 'pry'
class StatesController < ApplicationController
get '/states' do
if logged_in?
@user = current_user
@states = current_user.states
erb :'states/states'
else
redirect to '/login'
end
end
get '/states/new' do
if logged_in?
erb :'/states/create'
else
redirect to '/login'
end
end
post '/states' do
if logged_in? && params[:state_name] != ""
@state = State.create(:state_name => params[:state_name], :abbreviation => params[:abbreviation])
# binding.pry
@state.users << current_user
if @state.errors.any?
"Error, try again"
else
redirect "/states"
end
else
redirect to "/states/new"
end
end
get '/states/:id' do
if logged_in?
@state = State.find_by_id(params[:id])
if @state != nil
erb :'/states/show'
else
redirect to '/states'
end
else
redirect to '/login'
end
end
get '/states/:id/edit' do
if logged_in?
@state = State.find_by_id(params[:id])
if @state && current_user
erb :'states/edit'
else
redirect to '/states'
end
else
redirect to '/login'
end
end
patch '/states/:id' do
@state = State.find_by_id(params[:id])
if params[:state_name] != "" && @state.update(:state_name => params[:state][:state_name])
@state.update(:state_name => params[:state][:state_name])
redirect to "/states/#{@state.id}"
else
redirect to "/states/#{@state.id}/edit"
end
end
delete '/states/:id/delete' do
if logged_in?
@state = State.find_by_id(params[:id])
if @state && current_user
@state.destroy
end
redirect to '/states'
else
redirect to '/login'
end
end
end
【问题讨论】:
-
您的输入标签每个都有 2 个名称属性。他们应该只有一个。
-
还有 2 个
value属性。 -
但是当在我的一个视图中使用 state_name 和在另一个视图中使用缩写时,我如何区分这两个值?
-
请仅包含您提交此表单的操作。
-
另一个问题,您真的在表单中硬编码州名和缩写吗?您已经有一个表states。您应该将所有状态名称和 abs 存储在那里,并通过迭代从该表中获取的列表来呈现表单。
标签: html ruby model-view-controller sinatra sinatra-activerecord