0
我最近要求幫助重新排序檢查boxs列表的順序顯示,Ruby on Rails: re-order checkbox tagRuby on Rails的:錯誤信息沒有因爲改變一個列表
我找到了一個很好的答案,並走了,改變了我的代碼。由此看來,
<div class="tech" STYLE="text-align: left;">
<b>Technologies:</b>
<style>
.split { text-align:left; }
</style>
<p><ul>
<% for technol in Technol.all %>
<li class="split">
<%= check_box_tag "project[technol_ids][]", technol.id, @project.technols.include?(technol) %>
<%= technol.tech %>
</li>
<% end %>
</ul>
</p>
此,
<div class="tech" STYLE="text-align: left;">
<b>Technologies:</b>
<style>
.split { text-align:left; }
</style>
<p><ul>
<% @all_technols.each do |technol| %>
<li class="split">
<%= check_box_tag "project[technol_ids][]", technol.id, @project.technols.include?(technol) %>
<%= technol.tech %>
</li>
<% end %>
</ul>
</p>
與項目負責人新的行動看起來像這樣:
def new
@project = Project.new
@technol = Technol.new(params[:tech])
@all_technols = Technol.order('tech ASC')
tech_ids = params[:technols][:id].reject(&:blank?) unless params[:technols].nil?
@project_technol = @project.projecttechnols.build
respond_to do |format|
format.html # new.html.erb
format.json { render json: @project }
end
end
我現在已經注意到,如果用戶輸入一個新的項目,和一個validates_presence_of
或validates_format_of
標記在我的代碼中,錯誤消息不顯示,而是我得到一個錯誤消息:
NoMethodError in Projects#create
line #256 raised:
undefined method `each' for nil:NilClass
Extracted source (around line #256):
253:
254: <p><ul>
255:
256: <% @all_technols.each do |technol| %>
257:
258:
259:
它必須與重新排序技術有關,但我似乎無法找到解決辦法。希望有人能看到我要出錯的地方。提前致謝。
編輯
def create
@project = Project.new(params[:project])
@project.client = params[:new_client] unless params[:new_client].blank?
@project.role = params[:new_role] unless params[:new_role].blank?
@project.industry = params[:new_industry] unless params[:new_industry].blank?
@project.business_div = params[:new_business_div] unless params[:new_business_div].blank?
if !params[:technols].nil?
params[:technols][:id].each do |tech|
if !tech.empty?
@project_technol = @project.projecttechnols.build(:technol_id => tech)
end
end
end
respond_to do |format|
if @project.save
format.html { redirect_to @project, notice: 'Project was successfully created.' }
format.json { render json: @project, status: :created, location: @project }
else
format.html { render action: "new" }
format.json { render json: @project.errors, status: :unprocessable_entity }
end
end
end
我已經加入我的'create'行動,我的問題。我不明白爲什麼之前它會工作,但添加代碼來改變順序會影響它? – Jazz
因爲之前,您直接在視圖中查詢數據庫的'Technol.all',所以沒有中間變量。現在你有一個名爲'@ all_technols'的實體,你可以從控制器實例化它。所以你必須確保在渲染視圖之前實例化它 –
謝謝。這是問題所在。 – Jazz