我正在尝试通过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无法实现,那么我们将向您提供正确指导。
答案 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)