在Rails /路由匹配问题

时间:2016-11-07 01:19:23

标签: ruby-on-rails

我在点击链接时尝试更新单个属性(" 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,但我不知道该如何去做那些。

帮助表示赞赏;正如我所说,我对此非常陌生。

2 个答案:

答案 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