2014-03-13 84 views
0

對於我的@line模型,我有一個表單在我的NEW行頁面上作爲一個部分被包含時會完美工作,但會提高undefined method爲空?當我的EDIT頁面上包含NilClass`時。導軌選擇不能在編輯頁面上工作

編輯頁面有:

<%= form_for(@line, :html => { :class => "form-horizontal"}) do |f| %> 
      <%= render 'form', f: f %> 
     <%= f.submit "Submit changes", class: "btn btn-primary" %> 
<% end %> 

形式看起來是這樣的(負的div):

<%= f.label :name, class: "control-label" %> 
<%= f.text_field :name, placeholder: 'A relatively short line name' %> 

<%= f.label :description, class: "control-label" %> 

<%= f.text_area :description, placeholder: 'Full line name and any description' %> 

<%= f.label :manufacturer_id, class: "control-label" %> 

<%= f.select :manufacturer_id, options_from_collection_for_select(Manufacturer.all, :id, :name, {:selected => @line.manufacturer}) %> 

<%= f.label :parent_id, class: "control-label" %> 

<%= f.select :parent_id, @lines, {:selected => @line.parent, include_blank: true} %> 

問題是與最後一個列表上選擇選項。我使用@lines來填充所有現有行的下拉列表。我可能會改變這一點,使用AJAX來填充屬於上面選擇的製造商的行,但現在我只想讓編輯功能起作用。

我敢肯定這是一個明顯的錯誤,但沒有多少人在這裏看,閱讀文檔已找到解決方案。

如果它是有用的,這裏是我的控制器操作:

def edit 
    @line = Line.find(params[:id]) 
    end 

    def update 
    @line = Line.find(params[:id]) 
    if @line.update_attributes(line_params) 
     flash[:success] = "Line updated. #{undo_link}" 
     redirect_to @line 
    else 
     render 'edit' 
    end 
    end 

回答

0

嘗試上述答案,並卡住如何讓在下拉列表中顯示正確的線路名稱後,我知道了具有以下工作:

<%= f.select :parent_id, ("<option></option>" + options_from_collection_for_select(Line.all, :id, :name, {:selected => @line.parent_id})).html_safe %> 

得到的一切工作,並不需要對控制器的任何更改。

1

你是不是在你的edit行動定義@lines任何地方,所以當你使用它作爲您的視圖參數,它返回nil

0

你必須改變你的編輯操作,因爲你不是定義@lines任何地方:

def edit 
    @line = Line.find(params[:id]) 
    @likes = Like.all 
end 

,或者你可以叫你的索引行動:

def edit 
    @line = Line.find(params[:id]) 
    index 
end 

,或者你可以改變你的形式:

= f.select :user_id, Company.all, {:selected => @company.name, include_blank: true} 

我認爲它會幫助你。

相關問題