2013-10-17 25 views
0

Iam有點卡在這個問題。嘗試從管理視圖更新作業模型中的非批量可分配屬性。我需要一個觸發管理控制器中的操作方法的按鈕,它只是將作業的活動值更改爲true。非質量指派字段在視圖

在管理控制器:

 def approve 
    @job.update_attribute(:isactive = true) 
    if @job.save 
     redirect_to(:action => :show) 
     flash[:notice] = "Job Approved" 
    else 
     render 'show' 
    end 
    end 

在工作/ 1視圖

<div style="text-align:center;" class="widget"> 
<%= form_for(@job, :url => url_for(:controller => 'admin', :action => 'approve'), :html => {:id => "contact_form", :class => "g-form"}) do |f| %> 

<%= button_tag(:class => "g-btn type_default") do %> 
<i class="icon-share-alt icon-white"></i>Approve this job 
<% end %> 
<% end %>  
<% end %> 

不管我做什麼這種形式被提交到作業更新行動,並表示工作已成功更新,而不是通知管理員批准行爲中的「工作批准」。

我還添加了以下路線。但不知道我做錯了什麼。我需要一個簡單的按鈕(理想情況下是因爲樣式req的一個塊),它將job的isactive域設置爲true。

match "jobs/:id", :via=>:post, :controller=>"admin", :action=>"approve" 

回答

0

質量分配旨在保護精確打擊你想這樣的理想在這裏做什麼說,你應該把它添加到白名單(attr_accessible)如果你需要對其進行修改。

但是,即使您將isactive屬性列入白名單,您的控制器操作仍有幾個問題需要解決。

@job.update_attribute(:isactive = true)無效。 update_attribute不處理任務,正確的語法是update_attribute(attribute, value)所以它應該是:

@job.update_attribute(:isactive, true) 

此外,update_attribute方法調用保存傳遞的對象上。在update_attribute之後調用@job.save(假設沒有其他代碼分配屬性)是多餘的。

一種更好的方式來寫這個方法是:

def approve 
    if @job.update_attribute(:isactive, true) 
    redirect_to(:action => :show) 
    flash[:notice] = "Job Approved" 
    else 
    render 'show' 
    end 
end 

但是,如果你不能修改模型和不擔心回調或驗證,可以用update_column(或update_columns直接更新數據庫列in Rails 4):

def approve 
    if @job.update_column(:isactive, true) 
    redirect_to(:action => :show) 
    flash[:notice] = "Job Approved" 
    else 
    render 'show' 
    end 
end 
+0

謝謝大成功! – user2716736