gpt4 book ai didi

mysql - 如何在 Ruby on Rails 中使用相同的 HTML 表单更新或保存记录?

转载 作者:行者123 更新时间:2023-11-29 13:40:12 25 4
gpt4 key购买 nike

这是我第一次尝试在 Ruby on Rails 中更新记录,所以提前感谢您的帮助。我有一个 HTML 表单。在表单中,我想要更新 MySQL 的 newsavedmaps 表中的记录的选项。

该表单比下面的要复杂得多,但它具有以下基本结构:

ma​​ptry.html.erb

    <form id="createaMap" action="/newsavedmaps" method="post">                 
<label for="savemap_name">Map Title</label>
<input id="savemap_name" name="newsavedmapname" size="30" type="text" value="New Map"></p>
<%= link_to 'Update Saved Map', @newsavedmap, :confirm => 'Are you sure?', :method => :put %>
<input type="submit" id="savethismap" value="Save As New Map">
</form>

newsavedmaps View 文件夹中的 edit.html.erb

    <h1>Editing newsavedmap</h1>

<% form_for(@newsavedmap) do |f| %>
<%= f.error_messages %>

<p>
<%= f.submit 'Update' %>
</p>
<% end %>

<%= link_to 'Show', @newsavedmap %> |
<%= link_to 'Back', newsavedmaps_path %>

如果我从新记录开始,保存 map 就可以了。

但是,如果我从已定义 @newsavedmap 的位置开始,然后单击“更新保存的 map ”链接,它只会将我带到“/newsavedmaps/ID”。

我知道我可以使用表单助手,但我试图避免依赖重新创建整个表单的解决方案,因为它是在 HTML 中设置的。再次感谢您的帮助!

编辑 1

这是我尝试使用 Bigfang 的代码的日志。看起来正在发送正确的信息,但记录没有更新。请注意,有两个起始输入和两个结束输入,并且要么采用起始地址,要么采用结束地址,这就是为什么下面两个留空的原因。

还有什么我应该检查的吗?

    Processing NewsavedmapsController#update (for IP at DATE) [PUT]
Parameters: {"endhere"=>"", "endthere"=>"1600 Pennsylvania Avenue, Washington, DC 20500", "newsavedmapname"=>"New Map test", "startthere"=>"1201 Farragut Street Northwest, Washington, DC 20011", "id"=>"74", "starthere"=>"", "optimize"=>"on"}
Redirected to http://site.com/maptry
Completed in 11ms (DB: 0) | 302 Found [http://site.com/newsavedmaps/74]

NewsavedmapsController#update

    def update
@newsavedmap = Newsavedmap.find(params[:id])
respond_to do |format|
if @newsavedmap.update_attributes(params[:newsavedmap])
flash[:notice] = 'Newsavedmap was successfully updated.'
format.html { redirect_to "/maptry" }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @newsavedmap.errors, :status => :unprocessable_entity }
end
end
end

新闻保存 map 的edit.html.erb

在我的 route ,我有map.resources:newsavedmaps,并且我在Newsavedmaps的 View 中创建了一个文件夹。其中,我有一个 edit.html.erb 文件,如下所示:

    <h1>Editing newsavedmap</h1>

<% form_for(@newsavedmap) do |f| %>
<%= f.error_messages %>

id: <%= text_field :newsavedmap, :id %><br />
itinerary_id: <%= text_field :newsavedmap, :itinerary_id %><br />
start: <%= text_field :newsavedmap, :start %><br />
start_lat: <%= text_field :newsavedmap, :start_lat %><br />
start_long: <%= text_field :newsavedmap, :start_long %><br />
start_masterlocation_id: <%= text_field :newsavedmap, :start_masterlocation_id %><br />
end: <%= text_field :newsavedmap, :end %><br />
end_lat: <%= text_field :newsavedmap, :end_lat %><br />
end_long: <%= text_field :newsavedmap, :end_long %><br />
end_masterlocation_id: <%= text_field :newsavedmap, :end_masterlocation_id %><br />
name: <%= text_field :newsavedmap, :name %><br />
optimize: <%= text_field :newsavedmap, :optimize %><br />

<p>
<%= f.submit 'Update' %>
</p>
<% end %>

<%= link_to 'Show', @newsavedmap %> |
<%= link_to 'Back', newsavedmaps_path %>

不幸的是,当我尝试转到/newsavedmaps/ID 时,这会导致错误。错误是“未定义的方法‘endhere’。”但是,我不确定这是否是正确的方法。

最佳答案

我认为这里存在几个问题。

第一,你不能使用提交表单

<%= link_to 'Update Saved Map', @newsavedmap, :confirm => 'Are you sure?', :method => :put %>

因为link_tomethod将生成一个动态表单并提交它,因此您的表单将不会被提交。

第二,我不确定更新定义的@newsavedmap时要提交到哪里。

如果要提交到“/newsavedmaps/ID”并执行update Controller 保存记录的方法,我建议使用这个

<%= form_for @newsavedmap, :html=>{:id=>'createaMap'} do |f|%>
End Here: <%= f.text_field :endhere %><br />
End There: <%= f.text_field :endthere %><br />
Newsavedmap Name: <%= f.text_field :newsavedmapname %><br />
Start There: <%= f.text_field :startthere %><br />

Start There: <%= f.text_field :starthere %><br />
<input type="submit" id="savethismap" value="Save">
<% end %>

保留你表单的所有内容,只需修改表单标签为form_for,这样如果你的@newsavedmap是一条新记录,保存按钮就会执行create Controller 的方法,如果@newsavedmap是定义的记录,则保存按钮将执行update具有正确参数的 Controller 的方法。

关于mysql - 如何在 Ruby on Rails 中使用相同的 HTML 表单更新或保存记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18177308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com