2015-10-29 110 views
0

控制器未定義的方法`[]」爲零:NilClass爲活性模型和活動記錄

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,它返回undefined method '[]' for nil:NilClass

可以在任何一個告訴的解決這個問題

+0

從它看起來像'PARAMS錯誤[:查詢]''回報Nil',因爲你正在尋找不爲無存在的嵌套PARAM。要解決此問題,請將您的方法更改爲'method:「post」'並創建一個'create'操作 – Kkulikovskis

+0

謝謝。 –

+0

任何人都可以告訴ajax實現這個顯示輸出。 –

回答

0

回答你最初的問題:從它看起來像params[:query]回報Nil,因爲你正在尋找不爲Nil存在嵌套PARAM錯誤。要解決此問題,請嘗試將方法更改爲method: "post"並創建create操作。

Ajax實現:

  1. 添加remote: true到您的形式,所以它應該是這樣的:

    <%= form_for @query, url: queries_new_path, method: "post", remote: true do |f| %> 
    

2.in您create行動補充一點:

respond_to do |format| 
    format.js {} 
end 
  1. 創建一個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" %>

而且應該這樣做。關於AJAX Rails中

更多信息:http://guides.rubyonrails.org/working_with_javascript_in_rails.html#an-introduction-to-ajax

相關問題