Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails-如何使用链接更改数据库值_Ruby On Rails_Database_Link To - Fatal编程技术网

Ruby on rails rails-如何使用链接更改数据库值

Ruby on rails rails-如何使用链接更改数据库值,ruby-on-rails,database,link-to,Ruby On Rails,Database,Link To,我正在使用rails创建一个网站,我非常需要帮助,如何创建一个链接,当单击该链接时,它将更新数据库中的属性,但仅当单击时。我有以下代码: <%= link_to (myproperty_path) do %> <% @player.update_attribute("energy", @player.energy + 2) %><span>Take a Nap</span> <%end%> 小睡一会儿 但问题是,每当我刷新页面时

我正在使用rails创建一个网站,我非常需要帮助,如何创建一个链接,当单击该链接时,它将更新数据库中的属性,但仅当单击时。我有以下代码:

<%= link_to (myproperty_path) do %>
<% @player.update_attribute("energy", @player.energy + 2) %><span>Take a Nap</span>

<%end%>

小睡一会儿
但问题是,每当我刷新页面时,它都会更新属性,当我转到网站上的另一个页面时,它会再次更新属性。当我点击它时,它可以工作,但我希望它只在点击时工作,就这样。另外,如果我在同一页面上有两个这样的链接,单击一个链接就好像我同时单击两个链接一样。以下是我在myproperty页面上的内容:

<%= render 'sidebar' %>
<div id="yui-main" class="yui-b">
<h2>My Property</h2>
<br \>
<p><b>Property: </b><%= @player.property %><br \><br \> 
<%= link_to (myproperty_path) do %>
    <span>Take a Nap</span>
    <% if @player.energy <= 98 && @player.energy != 100 %>
    <% @player.update_attribute("energy", @player.energy + 2) %>
<% end %>
<% end %>
<br \>
<%= link_to (myproperty_path) do %>
    <span>Sleep</span>
    <% if @player.energy <= 96 && @player.energy != 100 %>
    <% @player.update_attribute("energy", @player.energy + 4) %>
<% end %>
<% end %>



<% if @player.property != "My Car" %>
    <b>Rent: </b><br \>
    <br \>
    <b>Bedroom</b><br \>
<% end %>

我的财产

属性:
小睡一会儿

您不应该使用
GET
对服务器进行任何更改。一些浏览器甚至“预取”页面上链接的数据,因此它可以在用户不知情的情况下在服务器上进行更改

在服务器上进行任何更改时,始终使用
POST
,浏览器将再次询问用户是否再次提交请求

在CRUD-创建、检索、更新和删除中,只能使用
GET
执行检索,其他操作通过
POST
完成。有人说要使用
PUT
DELETE
,但实际上,这是通过
POST
使用
\u方法
参数或类似名称来完成的


请参阅:

您不应该使用
GET
对服务器进行任何更改。一些浏览器甚至“预取”页面上链接的数据,因此它可以在用户不知情的情况下在服务器上进行更改

在服务器上进行任何更改时,始终使用
POST
,浏览器将再次询问用户是否再次提交请求

在CRUD-创建、检索、更新和删除中,只能使用
GET
执行检索,其他操作通过
POST
完成。有人说要使用
PUT
DELETE
,但实际上,这是通过
POST
使用
\u方法
参数或类似名称来完成的


请参阅:

无论您如何处理HTTP谓词,您的代码都有一个概念缺陷:

<%= link_to (myproperty_path) do %>
<% @player.update_attribute("energy", @player.energy + 2) %><span>Take a Nap</span>
<%end%>

小睡一会儿
打开此页面时,@player.update\u attributes调用将在生成链接时触发一次。实际的数据库更改必须在控制器内进行(在本例中为myproperty_path的路由目标)


此外,我完全同意您应该使用POST请求。

无论您如何处理HTTP谓词,您的代码都有一个概念缺陷:

<%= link_to (myproperty_path) do %>
<% @player.update_attribute("energy", @player.energy + 2) %><span>Take a Nap</span>
<%end%>

小睡一会儿
打开此页面时,@player.update\u attributes调用将在生成链接时触发一次。实际的数据库更改必须在控制器内进行(在本例中为myproperty_path的路由目标)


此外,我完全同意您应该使用POST请求。

您这样做根本不正确。Rails的设计目的不是在视图中包含业务逻辑,尤其是更新记录的逻辑

你想要的是

<%= link_to "Take a nap", {:controller => "player_actions", :action => "nap", :id => @player.id} %>
<%= link_to "Sleep", {:controller => "player_actions", :action => "sleep", :id => @player.id } %>

这样,只有当用户单击链接时,操作才会发生。当然,您还需要处理任何重定向或ajax渲染,以及验证等,但这通常是Rails代码的结构

你这样做根本不正确。Rails的设计目的不是在视图中包含业务逻辑,尤其是更新记录的逻辑

你想要的是

<%= link_to "Take a nap", {:controller => "player_actions", :action => "nap", :id => @player.id} %>
<%= link_to "Sleep", {:controller => "player_actions", :action => "sleep", :id => @player.id } %>

这样,只有当用户单击链接时,操作才会发生。当然,您还需要处理任何重定向或ajax渲染,以及验证等,但这通常是Rails代码的结构

这里有一个大约2005年的链接,指向预取“问题”:使用getv。波斯特是帕梅拉例子中最小的错误。她应该使用Rails的MVC特性。在这一点上讨论合适的http方法只会在这一点上引起混乱。波斯特是帕梅拉例子中最小的错误。她应该使用Rails的MVC特性。在这一点上讨论合适的http方法只会在这一点上引起混乱。非常感谢你们!我会试试你说的话,道格,然后回复你。我已经将你未注册的帐户合并为一个帐户,你现在应该可以对你的问题及其答案发表评论,并接受对你有帮助的答案。非常感谢你们!道格,我会试试你说的话,然后再回复你。我已经将你未注册的帐户合并为一个帐户,你现在应该可以对你的问题及其答案发表评论,并接受对你有帮助的答案。