使用Ruby on Rails更新JSon解析的投票,可能不需要JQuery吗?

时间:2018-11-10 20:11:20

标签: ruby-on-rails ruby

我正在尝试通过JSon解析的API使投票总数可编辑。我的名册控制器中包含以下内容:

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

Roster是我上面班级的名字。在我的rails视图中,我具有以下内容:

<% @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时,名册['vote']就会增加1。

目前,我的路线设置如下:

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

我试图在不使用jquery或ajax的情况下完成此操作,这就是为什么我将if roster.update部分重定向到rosters_path的原因,因此单击时基本上刷新了页面。目前,它还没有更新投票总数,但是我不确定我缺少什么。我想在一个页面上完成所有操作,因此,如果没有JQuery无法实现,那么我们将向您提供正确指导。

1 个答案:

答案 0 :(得分:0)

count_vote如果找不到您的名册或无法保存更新,将以静默方式失败。对其进行更改,以免发生任何异常。

  def count_vote
    roster = Roster.find(params[:id])
    roster.vote += 1
    roser.save!
    redirect_to rosters_path
  end
如果找不到名册,

find将引发RecordNotFound。如果无法保存更改,save!将引发错误。

  

由于某些原因,这些是当前仅有的参数。Controller :: { ,“ action” =>“ count_vote”}允许:false>如何添加id参数? – Sohel 5小时前

我对视图的工作方式不是很熟悉,但是我认为和this example一样,我认为您需要将roster传递到rosters_path

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

类似地,如果您希望count_vote重定向回刚更改的名册...

redirect_to rosters_path(roster)