这是我第一次尝试在 Ruby on Rails 中更新记录,因此在此先感谢您的帮助。我有一个 HTML 表单。在表单中,我想要更新 MySQL 中 newsavedmaps 表中的记录的选项。
该表单比下面的要复杂得多,但它具有以下基本结构:
maptry.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 视图文件夹的 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 %>
如果我从新记录开始,保存地图工作。
但是,如果我从已定义 @newsavedmap 的位置开始并单击“更新保存的地图”链接,它只会将我带到“/newsavedmaps/ID”。
我知道我可以使用表单助手,但我试图避免依赖于重新创建整个表单的解决方案,因为它是在 HTML 中设置的。再次感谢您的帮助!
编辑 1
这是我尝试使用 Bigxiang 的代码的日志。看起来正在发送正确的信息,但没有更新记录。请注意,有两个开始和两个结束输入,并且取开始或结束地址,这就是为什么下面两个留空的原因。
还有什么我应该检查的吗?
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
用于 newsavedmaps 的 edit.html.erb
在我的路线中,我有 map.resources :newsavedmaps 并在我的视图中为 Newsavedmaps 创建了一个文件夹。在那里,我有一个如下所示的 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’。” 但是,我不确定这是否是正确的方法。