我在点击链接时尝试更新单个属性(" status")。我是Rails的新手,并且遇到了类似的问题而没有成功。
我为此定义了一种新方法("接受"),这可能是也可能不是最好的方法。这是链接(在显示所有提交的表格中):
<td><%= link_to submission, method: :accept, data: { confirm: 'Are you sure?' } do %>
<i class="fa fa-check fa-border yes" aria-hidden="true"></i>
<% end %></td>
我尝试了几种方法来定义方法,包括:
def accept
@submission.update_attributes(:status, "accepted")
respond_to do |format|
format.html { redirect_to @submission, notice: 'Submission was successfully updated.' }
format.json { render :show, status: :ok, location: @submission }
end
end
和此:
def accept
@submission = Submission.find(params[:id])
if @submission.update_attributes(:status, "accepted")
redirect_to :action => 'show', :id => @submission
end
end
我得到的主要错误是&#34;没有路线匹配[POST]&#34; / submissions / 4&#34;&#34;。但我会假设像这样的更新将是PUT或PATCH,所以我不知道我在哪里指示它应该是POST。我猜我需要 创建一个POST路由或以某种方式表明它应该是PUT或PATCH,但我不知道该如何去做那些。
帮助表示赞赏;正如我所说,我对此非常陌生。
答案 0 :(得分:2)
定义新方法时,不要忘记在routes.rb
中创建相关路线通常PUT / Patch请求在&#34; / controller /:id&#34;将路由到更新方法。 在您的情况下,您还没有为您接受方法创建路线。
的routes.rb
post '/accept_status_change' => 'your_controller#accept' , as: :accept_status_change
视图
<td><%= link_to accept_status_change_path, method: :accept, data: { confirm: 'Are you sure?' } do %>
<i class="fa fa-check fa-border yes" aria-hidden="true"></i>
<% end %></td>
答案 1 :(得分:0)
如何使用button_to ..就像喜欢/ share 一样。 例如,用户将单击该链接,该链接将在数据库中提交用户接受的检查,并将获得一个小的更新视图,说明&#34;感谢您接受。&#34;
##add accept in the form,can add remote:true to update view with small message div
<%= button_to accept_user_choice_path(current_user) , method:'post' do %>
Accept <span class="fa fa-check btn btn-xs"></span>
<% end %>
##create a route
##use using member inside users resources to get user id
member { post : accept_user_choice }
##in your controller add the code to accept/toggle user clicks
def accept_user_choice
##you can also set yes/no and pass the same to controller in the url
##value = params[:type] == "yes" ? 1 : -1
@submission.update_attributes(:status, "accepted")
redirect_to :back, notice: "Submission was successfully updated."
end