2013-06-04 3 views
0

안녕하세요, 사용자가 특정 링크를 클릭하면 내 데이터베이스 (PostgreSQL) 내에서 값을 업데이 트하려고 노력하고 있는데, 나는 최선의 방법이라고 생각하지 않습니다. 사람이 내가 더 잘 달성 할 수있는 방법을 보여줄 수 있다면이클릭하면 데이터베이스를 업데이트하십시오.

보기

%ul.button-group.round.even-3 
      %li= link_to '<i class="general foundicon-checkmark"></i>'.html_safe, accept_availability_path(a), :method => 'put', :remote => true, :class => 'button success tiny', :id => a.id, :disable_with => '' 

컨트롤러

def accept 
    @availability = Availability.find(params[:id]) 
    @availability.available= true 

    respond_to do |format| 
     if @availability.update_attributes(params[:availability]) 
     format.html { render :nothing => true } 
     format.js 
     else 
     format.html { render :action => "edit" } 
     format.js 
     end 
    end 
    end 

루트

resources :availabilities do 
    put 'accept', :on => :member 
    put 'decline', :on => :member 
    end 

답변

1

특히 잘못된 것은 당신이있어 무엇과도 없다 좋은 것 하기. 컨트롤러는 update_attributes를 사용할 필요가 없으며, 속성을 전달하지 않습니다. 당신은 save 그것을 .available

def accept 
    @availability = Availability.find(params[:id]) 
    @availability.available = true 

    respond_to do |format| 
    if @availability.save 
     format.html { render :nothing => true } 
     format.js 
    else 
     format.html { render :action => "edit" } 
     format.js 
    end 
    end 
end 

당신의 변화에 ​​이렇게 같이 당신의 경로를 neaten 수 있습니다 : 링크/경로를 사용하는 것이 더 좋은 방법이

resources :availabilities do 
    member do 
    put :accept 
    put :decline 
    end 
end 
+0

가? –

+0

그들은 절대적으로 좋아 보입니다. 귀하의 경로가 간소화되고 답변이 업데이트 될 수 있습니다. 당신의 링크는 괜찮습니다.'link_to_remote'는 이것을하기위한 방법 이었지만 레일 3에서는': remote => true'를 사용하지 않을 것입니다. – Matt

+0

하지만 내 링크에': method => 'put ''을 사용해야합니다. –

관련 문제