Обновить анализируемый голос JSon с использованием Ruby on Rails, возможно без JQuery? - PullRequest
0 голосов
/ 10 ноября 2018

Я пытаюсь сделать общее количество голосов редактируемым с помощью анализируемого API JSon. В моем контроллере реестров есть следующее:

def index
@rosters = HTTParty.get('https:api', :headers =>{'Content_Type' => 'application/json'})
 @allrosters = Roster.all
 @allrostershash = {}
 @allrosters.each do |roster|
  image_url = roster['image_url']
  @allrostershash[ image_url ] = roster 
 end
 @rosters.each do |roster|
  img_url = roster['image_url']
  unless @allrostershash[img_url]
    Roster.create(roster)
 end
end
end
  def count_vote
    roster_id = params[:id]
    roster = Roster.find_by(roster_id)
    newvote = roster.vote + 1
    if roster.update({vote: newvote})
      redirect_to rosters_path
    end
  end

Ростер - это название моего класса выше. В моих представлениях рельсов у меня есть следующее:

<% @rosters.each do |roster| %>
  <div class='each'>
    <%= image_tag(roster['image_url'], class: 'image') %>
    <%= hidden_field_tag(roster['id']) %>
    <p class='name'> <%= roster['name'] %> </p>
    <p class='title'> <%= roster['title'] %> </p>
    <p> <%= roster['bio'] %> </p>
    <p> <b> Want to work with <%= roster['name'] %>? </b> <%= link_to image_tag('yes.jpg', class: 'yes'), rosters_path, method: :patch %>
    <br>
    <%= roster['vote'] %> People have said Yes! </p>
    <br>
  </div>
<% end %>

Мне бы хотелось, чтобы каждый раз, когда кто-то нажимал на yes.jpg, список ['voice'] увеличивается на 1.

В настоящее время мои маршруты настроены следующим образом:

get 'rosters', to: 'rosters#index'
patch 'rosters', to: 'rosters#count_vote'

Я пытаюсь выполнить это без jquery или ajax, поэтому у меня есть часть if roster.update для перенаправления в rosters_path, поэтому она в основном обновляет страницу при нажатии. Однако сейчас он не обновляет общее количество голосов, я не уверен, что мне не хватает. Я хотел бы сделать все это на одной странице, поэтому, если это невозможно без JQuery, любые указания в правильном направлении приветствуются.

1 Ответ

0 голосов
/ 11 ноября 2018

count_vote молча завершится ошибкой, если не удастся найти ваш список или не удастся сохранить обновление. Измените его, чтобы оно вызывало исключение, если что-то не получится.

  def count_vote
    roster = Roster.find(params[:id])
    roster.vote += 1
    roser.save!
    redirect_to rosters_path
  end

find повысит RecordNotFound, если список не найден. save! вызовет ошибку, если изменения не могут быть сохранены.

Это единственные Титулы в настоящее время по какой-то причине ActionController :: Параметры { "_method" => "заплаты", "authenticity_token" => "qbORnCLNnI9P1zUZ02VEP3qJMwYOGa5sGw6KblPFj99mvjwZQj9VnDQ2e + 6ZStJi3PJZ3MidSMsdoWlwOgBN9w ==", "контроллер" => "Реестры" , "action" => "count_vote"} разрешено: false> как добавить параметр id? - Sohel 5 часов назад

Я не очень знаком с тем, как работают представления, но я думаю, что, как в этом примере , я считаю, что вам нужно передать roster в rosters_path.

<%= link_to image_tag('yes.jpg', class: 'yes'), rosters_path(roster), method: :patch %>

Аналогично, если вы хотите, чтобы count_vote перенаправил обратно в список, который вы только что изменили ...

redirect_to rosters_path(roster)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...