【发布时间】:2016-05-03 09:05:54
【问题描述】:
我有 2 个模型。
Scoreboard Model : can have many teams
Team Model : belongs to Scoreboard
Teams has the follow columns:
name: string
win,loss,tie: integer
在 Team#Index 视图中,我收集了与记分牌相关的所有团队。同样在该页面上,我可以在每个团队对象的顶部呈现一个编辑表单并通过 ajax 对其进行更新。以下是相关代码:
团队#索引视图:
<div class="team-list">
<%= render @teams.reject(&:new_record?) %>
</div>
_team.html.erb
<div class="row team-div" id="team_<%=team.id%>">
<%= link_to (scoreboard_team_path(@scoreboard, team)) do %>
<div class="col-xs-4 team-div-1"> <%= team.name %> </div>
<% end %>
<%= link_to (edit_scoreboard_team_path(@scoreboard, team)), remote: true, class: "team-edit-link" do %>
<div class="col-xs-6 team-data">
<div class="row">
<div class="col-xs-4 team-div-2"><%= team.win %> </div>
<div class="col-xs-4 team-div-2"><%= team.loss %> </div>
<div class="col-xs-4 team-div-2"><%= team.tie %></div>
</div>
</div>
<% end %>
</div>
如您所见,我有一个可用的编辑链接,它通过 ajax 呈现一个编辑表单来代替有问题的 team object。编辑表单仅更新 win,loss,tie 列。
编辑呈现的表单:
<%= form_for [@scoreboard, @team], remote: true do |f| %>
<div class="row team-edit-form">
<div class="col-xs-4 edit-team-1">Placeholder</div>
<div class="col-xs-2 edit-team-2"><%= f.number_field :win, min: 0, max: 9999, class: "form-control", placeholder: "0" %></div>
<div class="col-xs-2 edit-team-2"><%= f.number_field :loss, min: 0, max: 9999, class: "form-control", placeholder: "0" %></div>
<div class="col-xs-2 edit-team-2"><%= f.number_field :tie, min: 0, max: 9999, class: "form-control", placeholder: "0" %></div>
<div class="col-xs-2 edit-team-3"> <%= f.submit "Done", :data => {:disable_with => "Saving..."}, class: "btn btn-primary" %></div>
</div>
<% end %>
Team#update 控制器方法(通过 ajax 重新加载新编辑的团队对象 div):
def update
@scoreboard = Scoreboard.find(params[:scoreboard_id])
@team = @scoreboard.teams.find(params[:id])
if @team.update_attributes(team_params)
respond_to do |format|
format.html {redirect_to scoreboard_teams_path(@scoreboard)}
format.js
end
else
respond_to do |format|
format.html {redirect_to scoreboard_teams_path(@scoreboard)}
format.js { render action: "update_error" }
end
end
end
现在解决我的问题。以上所有都发生在 ajax 的 team#index 视图上。 在 team#show 视图上,我想只编辑没有 ajax 的团队名称。
到目前为止,这是 team#show 视图的样子:
团队#show 视图
<h3> <%= @team.name %> <h3>
<%= form_for [@scoreboard, @team] do |f| %>
<div class="col-xs-4"><%= f.text_field :name, required: true, maxlength: 30, class: "team-name-field form-control", placeholder: "Enter name" %></div>
<div class="col-xs-1"> <%= f.submit "Update", :data => {:disable_with => "Saving..."}, class: "btn btn-primary" %></div>
<% end %>
提交后,我想更新名称,然后将页面重定向回 team#show(不需要 ajax)。目前,此表单也路由到相同的更新方法。是否可以使用相同的更新方法但对 team#show 视图执行不同的响应代码?如果没有,我如何在 team#show 页面上提交表单时执行自定义更新代码?
【问题讨论】:
标签: ruby-on-rails activerecord