2016-03-11 2 views
0

Я пытаюсь отменить подписку подписчиков через форму для удаления, в которой они вводят свой адрес электронной почты, а затем отправляют, а затем удаляют подписку. Не знаю, почему это не работает. Я пробовал несколько вещей через мой контроллер. Будут ли любить некоторые предложения или альтернативы.Удалить подписку с помощью формы Rails 4

В настоящее время получает эту ошибку

Couldn't find Subscription without an ID 

подписки Контроллер

def destroy 
    @subscriptions = Subscription.all 
    @subscription = @subscriptions.find(params[:id]) 
    if @subscription.email == params[:email] 
    @subscription.destroy 
      flash[:notice] = "You have been unsubscribed" 
      redirect_to root_path 
     else 
    end 
end 

Маршруты

Rails.application.routes.draw do 
get 'password_resets/new' 

    get 'password_resets/edit' 

    get 'sessions/new' 

    get 'users/new' 

    resources :posts 
    root 'static_pages#new_home' 

    resources :subscriptions, only: [:new, :create, :edit, :update, :show, :destroy] 

    get '/home' => 'static_pages#home' 
    get 'subscriptions' => 'subscriptions#show' 
    delete 'subscriptions' => 'subscriptions#destroy' 
    get '/about' => 'static_pages#about' 
    get '/author' => 'static_pages#author' 
    get '/contact' => 'static_pages#contact' 
    get '/book' => 'static_pages#book' 
    get '/signup' => 'users#new' 
    get 'login' => 'sessions#new' 
    post 'login' => 'sessions#create' 
    delete 'logout' => 'sessions#destroy' 

    resources :users 
    resources :account_activations, only: [:edit] 
    resources :password_resets, only: [:new, :create, :edit, :update] 

    resources :posts do 
    resources :comments 
    end 
end 

Отказаться частичной подписка в просмотре

<%= form_for @subscription, method: :delete do |f| %> 


<div class="row"> 
    <h2>Unsubscribe</h2> 
</div> 
<div class="row newsletter"> 
    <form method="post" action="#" class="contact-form"> 
     <div class="row email-label"> 
     <%= f.label :email, :class => 'label-email' %> 
     <%= f.email_field :email %> 
     </div> 
     <div class="row"> 
     <%= f.submit 'Unsubscribe', :class => 'btn-full-subscribe' %> 
     </div> 
    </form> 
</center 
<% end %> 

Я пробовал несколько вещей без везения. Помощь была бы оценена. Благодарю. Подписки не связаны с моделью пользователя.

ответ

1

Эта строка @subscription = @subscriptions.find(params[:email]) вызывает проблему.

Попробуйте @subscription = @subscriptions.find_by_email(params[:email]) или еще лучше, используйте идентификатор @subscription = @subscriptions.find(params[:id]).

ActiveRecord::find только использует ids: http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find.

+0

Да, я попробовал просто «найти (params [: id])» раньше, и по какой-то причине он все еще выдавал ошибку. Однако я полностью забыл о поиске по имени атрибута. Благодарю. Попробуй –

+0

Внесите изменения, а затем обновите свой вопрос, если вам нужна дополнительная помощь! – fbelanger

+0

Когда я использую ID, он все равно дает мне Не удалось найти без ID. Но я хочу, чтобы ID был правильным? Я думаю, что часть вопроса здесь использует форму. Тем не менее, я не могу придумать какой-либо другой хороший способ сделать это, так как я не могу удалить подписку, если кто-то не отправляет свое электронное письмо, чтобы понять, какую подписку фактически удалить. –

0

Проблема здесь

@subscription = @subscriptions.find(params[:email]) 

, потому что находка использует идентификатор для извлечения записи, если вы хотите получать от любого другого использования поля find_by_"attribute_name", замените ее

@subscription = Subscription.find_by_email(params[:email]) 

Или нет необходимости записать дополнительный код. Не нужно получать все подписки. Чтобы удалить использование

@subscription = Subscription.find_by_email(params[:email]) 
or 
@subscription = Subscription.find(params[:id]) 

if @subscription.destroy 
    flash[:notice] = "You have been unsubscribed" 
    redirect_to root_path 
end 
Смежные вопросы