0

私はこの問題にちょっと立ち往生しています。管理者ビューから、ジョブ モデル内の一括割り当て不可の属性を更新しようとしています。ジョブの isactive 値を 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 %>   

私が何をしても、このフォームはジョブ更新アクションに送信され、管理者の承認アクションからの「ジョブが承認されました」という通知ではなく、ジョブが正常に更新されたことを示します。

次のルートも追加しました。しかし、何が間違っているのかわかりません。ジョブの isactive フィールドを true に設定する単純なボタン (理想的にはスタイリング要件のためにブロック) が必要です。

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

1 に答える 1

0

一括割り当ては、ここで行おうとしていることから正確に保護するように設計されているため、理想的には、attr_accessible変更する必要がある場合はホワイトリスト ( ) に追加する必要があります。

isactiveただし、属性をホワイトリストに登録したとしても、対処する必要があるコントローラー アクションに関する問題がいくつかあります。

@job.update_attribute(:isactive = true)有効じゃない。update_attributeは割り当てを処理しません。正しい構文は次のとおりですupdate_attribute(attribute, value)

@job.update_attribute(:isactive, true)

また、update_attribute渡されたオブジェクトに対して save メソッドを呼び出します。@job.save後の呼び出しupdate_attribute(属性を割り当てるコードが他にない場合) は冗長です。

このメソッドを記述するより良い方法は次のとおりです。

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

ただし、モデルを変更できず、コールバックや検証について心配していない場合は、データベースの列を直接update_column(またはupdate_columnsRails 4 で)更新できます。

def approve
  if @job.update_column(:isactive, true)
    redirect_to(:action => :show)
    flash[:notice] = "Job Approved"
  else
    render 'show'
  end
end
于 2013-10-19T02:33:01.837 に答える