2017-05-16 11 views
0

activeという名前のブール値を持つモデルorganismereferentがあります。私がしようとしていることは、それが異なる行動をしている価値に依存しています。ビューからブール値を変更する

アクティブな場合、ボタンは無効になり、ユーザーはアクティブをfalseに設定できます。そのあと、ボタンをアクティブにして、アクティブに戻すように設定する必要があります。

私のコントローラでメソッドを作成してから、そのメソッドをインデックスビューから呼び出そうとしましたが、それは私にNo route matches [POST] "/organismereferents/8"を与えます。

<table class="table table-hover"> 

<tr> 
    <th>Nom Organisation</th> 
    <th>Site Web</th> 
</tr> 

<% @organismes.each do |organisme| %> 
    <tr> 
     <td><%= organisme.nom_organisation %></td> 
     <td><%= organisme.site_web %></td> 
     <td><%= link_to 'Show', organismereferent_path(organisme), class: 'btn btn-info' %></td> 
     <td><%= link_to 'Edit', edit_organismereferent_path(organisme), class: 'btn btn-warning' %></td> 

     <% if organisme.active == false %> 

     <td><%= link_to 'Activate', organismereferent_path(organisme), class: 'btn btn-danger', 
       method: :activate, 
       data: { confirm: 'Are you sure?' } %></td> 
     <% else %> 

     <td><%= link_to 'Deactivate', organismereferent_path(organisme), class: 'btn btn-danger', 
       method: :deactivate, 
       data: { confirm: 'Are you sure?' } %></td> 

     <% end %> 

    </tr> 
<% end %> 
</table> 

コントローラー:

def index 
    @organismes = Organismereferent.all 
end 

def deactivate 
    @organisme = Organismereferent.find(params[:id]) 
    @organisme.active = false 
end 

def activate 
    @organisme = Organismereferent.find(params[:id]) 
    @organisme.active = true 
end 

あなたはどんなより多くの情報が必要な場合は、私がなる

そのビューを達成する簡単な方法がなければならないので、私はRuby on Railsのにはかなり新しいですうれしいです。

ルート:

Rails.application.routes.draw do 
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 
get 'master/index' 

resources :organismereferents 

# Notre page principal 
root 'master#index' 
end 

enter image description here

+0

routes.rbファイルを投稿できますか?また、コマンドラインから 'rake routes'と入力して結果を投稿してください。 – moveson

+0

@moveson追加しました。 – CNuts

答えて

1

私たちはここにいくつかの問題を抱えています。

最初に、あなたの意見では、link_toヘルパーmethodパラメータはコントローラアクションの名前を知りたくありません。使用するhttpメソッドを知りたいあなたがやっている行動については、最も適切なのはPATCHと思う。これらの行をmethod: :patchに変更してください。

第2に、routes.rbファイルを更新して、必要なルートを含める必要があります。あなたは、次のとresources :organismereferentsを置き換えることによって、それを行うことができます。

resources :organismereferents do 
    member { patch :activate } 
    member { patch :deactivate } 
end 

member指定を使用して、あなたがURLで:idのparamを含めるレールに示します。あなたが見るべきrake routesを実行すると、あなたがすでに持っているものに加えて、以下:

activate_organismereferents PATCH /organismereferents/:id/activate(.:format) organismereferents#activate 
deactivate_organismereferents PATCH /organismereferents/:id/deactivate(.:format) organismereferents#deactivate 

第三に、あなたはあなたのパスヘルパーを修正する必要があります。 rake routesによって返される最初の列は、link_toヘルパーで使用できるRailsヘルパーパスの名前を示します。したがって、アクティブ化リンクでorganismereferent_path(organisme)activate_organismereferent_path(organisme)に変更し、無効化リンクでdeactivate_organismereferent_path(organisme)を使用する必要があります。

最後に、コントローラのアクションでは、ブール値を変更した後にレコードを保存しません。変更を維持するには@organisme.saveに電話する必要があります。または、変更を行い、1行に保存する場合は、@organisme.update(active: true)@organisme.update(active: false)を使用できます。

+0

本当にありがとう、それは完璧に働いています、そして、私は物事がレールでどのように機能するかを少しは理解しています:)変更後にページを更新する方法はありますか?それを忘れて、私は 'redirect_to organismereferents_path'を追加し、それはトリックを行います。あまりにもあなたの助けをありがとう:) – CNuts

関連する問題