控制器
def new
@query.query_string = params[:query][:query_string]
end
模型
def query_string=(query_str)
@query_string = query_str
@query_result = ActiveRecord::Base.connection.execute(query_str)
end
视图
<%= form_for @query, url: queries_new_path, method: "get" do |f| %>
<td><%= f.text_field :query_string %></td>
我刚刚展示了我的代码的abstarct.it返回undefined method '[]' for nil:NilClass
。
任何人都可以告诉解决这个问题的方法
答案 0 :(得分:0)
回答您的初步问题:从错误看起来params[:query]
返回Nil
,因为您正在寻找Nil
不存在的嵌套参数。要解决此问题,请尝试将for方法更改为method: "post"
并创建create
操作。
AJAX实施:
将remote: true
添加到您的表单中,因此它应该类似于:
<%= form_for @query, url: queries_new_path, method: "post", remote: true do |f| %>
2.在create
行动中添加以下内容:
respond_to do |format|
format.js {}
end
创建一个create.js.erb
文件,您可以在其中定义ajax回调(呈现的内容,隐藏的内容等)。如果您在创建操作中执行@query.save
或类似操作,则可以在视图中执行此操作:
<% if @query.save %>
$(".some_success_block").html("some success message")
<% else %>
$(".some_outter_div_around_form").html("<%= j render 'form' %>")
<% end %>
这要求您有一个名为_form.html.erb
的部分视图,其中包含您的表单。
然后,您可以使用new.html.erb
<%= render "form" %>
中的表单
那应该这样做。
有关AJails in Rails的更多信息:http://guides.rubyonrails.org/working_with_javascript_in_rails.html#an-introduction-to-ajax