Javascript 使用js和ruby制作的键盘时出错
这是我的第一个问题,所以,我会尽力做到最好 我试图在rails应用程序中加入一个键盘,以便用户在搜索时输入一些特殊字符。键盘是用JavaScript制作的,应用程序是用ROR运行的。没有键盘一切正常,但一旦我输入name:search(允许js在我的文本中包含字符)后,rails在QuestionsControllercreate中获得以下错误name错误,但是如果我从视图中删除name:search,应用程序运行正常,但显然我无法输入任何字符 这是我的看法Javascript 使用js和ruby制作的键盘时出错,javascript,ruby-on-rails,Javascript,Ruby On Rails,这是我的第一个问题,所以,我会尽力做到最好 我试图在rails应用程序中加入一个键盘,以便用户在搜索时输入一些特殊字符。键盘是用JavaScript制作的,应用程序是用ROR运行的。没有键盘一切正常,但一旦我输入name:search(允许js在我的文本中包含字符)后,rails在QuestionsControllercreate中获得以下错误name错误,但是如果我从视图中删除name:search,应用程序运行正常,但显然我无法输入任何字符 这是我的看法 <%=
<%= form_for(@question, role: "search", html: {class: "form-search", id:"searchform",name: "search1"}) do |f| %>
<div class="input-group">
<%= f.text_field :content,class: "form-control input-lg", name: "search", id: "autocomplete-dynamic", placeholder: "Escribe tu pregunta, ejemplo: ¿ Cuánto es 2+2 ?"%>
<span class="input-group-btn">
<% if current_user %>
<%= f.submit "Preguntar", :class => "btn" %>
<% else %>
<%= link_to 'Preguntar',new_user_registration_path, class: 'btn' %>
<% end %>
</span>
</div>
<div class="keyboard">
<span class="glyphicon glyphicon-th"></span>
</div>
<div id="keyboard" class="wrap">
<div class="content">
<div id="first_row">
<td><input type="button" value="±" onclick="retornar(value)"></td>
<td><input type="button" value="∞" onclick="retornar(value)"></td>
<td><input type="button" value="=" onclick="retornar(value)"></td>
<td><input type="button" value="≠" onclick="retornar(value)"></td>
<td><input type="button" value="∫" onclick="retornar(value)"></td>
<td><input type="button" value="~" onclick="retornar(value)"></td>
<td><input type="button" value="×" onclick="retornar(value)"></td>
<td><input type="button" value="≈" onclick="retornar(value)"></td>
<td><input type="button" value="÷" onclick="retornar(value)"></td>
<td><input type="button" value="!" onclick="retornar(value)"></td>
<td><input type="button" value="∝" onclick="retornar(value)"></td>
<td><input type="button" value="<" onclick="retornar(value)"></td>
<td><input type="button" value="≪" onclick="retornar(value)"></td>
<td><input type="button" value=">" onclick="retornar(value)"></td>
</div>
<% end %>
问题控制员:
class QuestionsController < ApplicationController
before_action :set_question, only: [:show, :edit, :update, :destroy]
before_action :question_params
def index
@questions = current_user.questions
end
def new
@question = Question.new
end
def create
@question = current_user.questions.new(question_params)
respond_to do |format|
if @question.save
format.html { redirect_to questions_path, notice: 'Tu pregunta fue creada con exito.' }
format.json { render action: 'show', status: :created, location: @question }
else
format.html { render action: 'new' }
format.json { render json: @question.errors, status: :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @question.update(question_params)
format.html { redirect_to @question, notice: 'Pregunta actualizada con exito.' }
format.json { head :no_content }
else
format.html { render action: 'edit' }
format.json { render json: @question.errors, status: :unprocessable_entity }
end
end
end
def destroy
@question.destroy
respond_to do |format|
format.html { redirect_to questions_url }
format.json { head :no_content }
end
end
private
def set_question
@question = Question.find(params[:id])
end
def question_params
params.require(question).permit(:content , :answer, :user_id,)
end
end
还有我的控制台
Completed 400 Bad Request in 49ms
ActionController::ParameterMissing (param not found: ):
app/controllers/questions_controller.rb:72:in `question_params'
app/controllers/questions_controller.rb:27:in `create'
Rendered /home/george/.rvm/gems/ruby-2.1.2/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_source.erb (2.2ms)
Rendered /home/george/.rvm/gems/ruby-2.1.2/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.erb (3.0ms)
Rendered /home/george/.rvm/gems/ruby-2.1.2/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (4.1ms)
Rendered /home/george/.rvm/gems/ruby-2.1.2/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (34.7ms)
Started POST "/questions" for 127.0.0.1 at 2014-11-09 15:02:25 -0500
Processing by QuestionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"S3PJDzjKanM1wVmn76tZGmaIF6GcU6+crn3N6ijbB5Q=", "search"=>"dddd≥≥≥≅≅≅", "commit"=>"Preguntar"}
Completed 500 Internal Server Error in 17ms
NameError (undefined local variable or method `question' for #<QuestionsController:0xc29cc94>):
app/controllers/questions_controller.rb:72:in `question_params'
Rendered /home/george/.rvm/gems/ruby-2.1.2/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_source.erb (1.9ms)
Rendered /home/george/.rvm/gems/ruby-2.1.2/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.8ms)
Rendered /home/george/.rvm/gems/ruby-2.1.2/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (2.2ms)
Rendered /home/george/.rvm/gems/ruby-2.1.2/gems/actionpack-4.0.2/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (66.4ms)
问题参数方法有两个错误: 必须将param的名称作为符号传递给require方法:question 参数的后面有一个前导逗号。 因此,该方法的固定版本如下:
def question_params
params.require(:question).permit(:content, :answer, :user_id)
end
这是解决办法。整个问题是js和视图 我的重构javascript
function retornar(num){
var anterior = document.getElementById("autocomplete-dynamic").value;
document.getElementById("autocomplete-dynamic").value=anterior+num;
}
还有我的全新观点
<div class="row">
<div class="hero-box col-sm-8 col-sm-offset-2">
<%= form_for(@question, html: {class: "form-search"}) do |f| %>
<div class="input-group">
<%= f.text_field :content,class: "form-control input-lg", id: "autocomplete-dynamic", placeholder: "Escribe tu pregunta, ejemplo: ¿ Cuánto es 2+2 ?" %>
<span class="input-group-btn">
<% if current_user %>
<%= f.submit "Preguntar", :class => "btn" %>
<% else %>
<%= link_to 'Preguntar',new_user_registration_path, class: 'btn' %>
<% end %>
</span>
</div>
<% end %>
<div class="keyboard">
<span class="glyphicon glyphicon-th"></span>
</div>
<div id="keyboard" class="wrap">
<div class="content">
<div id="first_row">
<td><input type="button" value="±" onclick="retornar(value)"></td>
<td><input type="button" value="∞" onclick="retornar(value)"></td>
<td><input type="button" value="=" onclick="retornar(value)"></td>
<td><input type="button" value="≠" onclick="retornar(value)"></td>
<td><input type="button" value="∫" onclick="retornar(value)"></td>
<td><input type="button" value="~" onclick="retornar(value)"></td>
<td><input type="button" value="×" onclick="retornar(value)"></td>
<td><input type="button" value="≈" onclick="retornar(value)"></td>
<td><input type="button" value="÷" onclick="retornar(value)"></td>
<td><input type="button" value="!" onclick="retornar(value)"></td>
<td><input type="button" value="∝" onclick="retornar(value)"></td>
<td><input type="button" value="<" onclick="retornar(value)"></td>
<td><input type="button" value="≪" onclick="retornar(value)"></td>
<td><input type="button" value=">" onclick="retornar(value)"></td>
</div>
</div>
</div>
感谢@guillermo的大力支持感谢您的回答,但即使这些修复错误一直显示出来,我认为问题应该在强参数中。
function retornar(num){
var anterior = document.getElementById("autocomplete-dynamic").value;
document.getElementById("autocomplete-dynamic").value=anterior+num;
}
<div class="row">
<div class="hero-box col-sm-8 col-sm-offset-2">
<%= form_for(@question, html: {class: "form-search"}) do |f| %>
<div class="input-group">
<%= f.text_field :content,class: "form-control input-lg", id: "autocomplete-dynamic", placeholder: "Escribe tu pregunta, ejemplo: ¿ Cuánto es 2+2 ?" %>
<span class="input-group-btn">
<% if current_user %>
<%= f.submit "Preguntar", :class => "btn" %>
<% else %>
<%= link_to 'Preguntar',new_user_registration_path, class: 'btn' %>
<% end %>
</span>
</div>
<% end %>
<div class="keyboard">
<span class="glyphicon glyphicon-th"></span>
</div>
<div id="keyboard" class="wrap">
<div class="content">
<div id="first_row">
<td><input type="button" value="±" onclick="retornar(value)"></td>
<td><input type="button" value="∞" onclick="retornar(value)"></td>
<td><input type="button" value="=" onclick="retornar(value)"></td>
<td><input type="button" value="≠" onclick="retornar(value)"></td>
<td><input type="button" value="∫" onclick="retornar(value)"></td>
<td><input type="button" value="~" onclick="retornar(value)"></td>
<td><input type="button" value="×" onclick="retornar(value)"></td>
<td><input type="button" value="≈" onclick="retornar(value)"></td>
<td><input type="button" value="÷" onclick="retornar(value)"></td>
<td><input type="button" value="!" onclick="retornar(value)"></td>
<td><input type="button" value="∝" onclick="retornar(value)"></td>
<td><input type="button" value="<" onclick="retornar(value)"></td>
<td><input type="button" value="≪" onclick="retornar(value)"></td>
<td><input type="button" value=">" onclick="retornar(value)"></td>
</div>
</div>
</div>