2016-01-19 7 views
1

Надеюсь, что кто-то может помочь с этой проблемой.Rails 4, атрибут модели обновления с link_to

У меня есть 2 контроллера/модели: (1) Пользователь имеет много (2) обзоров. Отзывы принадлежат Пользователям.

Я хочу просто обновить атрибут флага в модели Review, используя link_to в представлении. Если пользователь нажмет на ссылку «флаг», он обновит/исправлю атрибут модели «флаг» в «Обзор модели» до целого числа «1».

Что-то вроде этого?

<%= link_to 'Flag', [review.user, review.flag], method: :put, data: { confirm: 'Are you sure?' } %> 

Любая помощь приветствуется!

ответ

0

Ваш метод reviews_controller.rb должен выглядеть следующим образом:

before_action :set_review, only: [:show, :edit, :update, :destroy, :put] 

def put 
    @review.update(flag: 1) 
end 

private 
    def set_review 
     @review = Review.find(params[:id]) 
    end 
end 

Если предположить, что у вас есть флаг установлен как целое число в вашей схеме.

+0

спасибо - какова была бы ссылка на строку кода? похоже, все еще получает эту ошибку: param отсутствует или значение пустое: user – gitastic

+0

<% = link_to 'Flag', review, method:: put, data: {подтвердить: «Вы уверены?» }%> – apebeast

2

Вы могли бы сделать что-то вроде:

reviews_controller.rb

class ReviewsController < ApplicationController 

    def flag 
    review = Review.find(params[:id]) 
    review.flag! 
    redirect_to :back #or wherever you want to redirect to 
    end 
end 

routes.rb

resources :reviews do 
patch :flag, on: member #reviews/1/flag 
end 

отзывы/show.html.erb

<%= link_to "Flag", flag_review_path(review), method: :patch, data: { confirm: 'Are you sure?' }%> 

модели/review.rb

class Review < ActiveRecord::Base 

def flag! 
    update_attribute(:flag, 1) 
    #If you don't want callbacks or validations use this 
    #update_columns(:flag, 1) 
end 
end 

Надежда это помогает!