我需要一些关于如何使用Jquery/Ajax更新页面上的一个div而不实际加载页面的指导。在我提问之前,我将提供一些必要的信息。
我有两个模型:
Scoreboard
模型 (has_many :teams
)Team
模型 (belongs_toscoreboard
)
在 scoreboard#show
页面上,我已经呈现了一个partial来显示所有的 @scoreboard.teams
。
这个partial会按照以下代码详细说明的方式显示所有的团队:
<div class ="team-list" id="team_<%=team.id%>">
<div class= "boxin1"><%= team.name %></div>
<div class= "boxin2"><%= team.win %></div>
<div class= "boxin2"><%= team.loss %></div>
<div class= "boxin2"><%= team.tie %></div>
<span class= "boxin3 btn btn-primary"><%= link_to "Edit", edit_scoreboard_team_path(@scoreboard, team), remote: true %> </span>
<span class= "boxin3 btn btn-primary"><%= link_to "Del", [@scoreboard, team], remote: true, method: :delete, data: { confirm: "Are you sure you want to delete the team?" } %>
</div>
现在我的问题涉及到“编辑”按钮,点击后会调用ajax请求,弹出一个表单来编辑团队,然后在提交表单后,调用Teams Controller中的更新方法。为了进一步澄清,以下是相关代码:
团队控制器的编辑和更新方法:
def edit
@scoreboard = Scoreboard.find(params[:scoreboard_id])
@team = @scoreboard.teams.find(params[:id])
respond_to do |format|
format.html {redirect_to scoreboard_url(@team.scoreboard_id)}
format.js
end
end
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_url(@team.scoreboard_id)}
format.js
end
else
render 'edit'
end
end
这里是edit.js.erb和update.js.erb文件的代码,以及澄清它们的操作描述: edit.js.erb
$("#team_<%=@team.id%>").hide();
$("#team_<%=@team.id%>").after("<%= j render 'teamedit'%>");
点击编辑路径链接按钮后,正在编辑的团队的div被隐藏,紧接着渲染出一个名为teamedit的表单。 update.js.erb
$("#edit_team_<%=@team.id%>").hide();
$("#team_<%=@team.id%>").load("scoreboards/show.html.erb"); #help needed here
$("#team_<%=@team.id%>").show();
现在当提交表单后调用更新控制器方法时,使用jquery隐藏表单,我想重新加载之前隐藏的团队div,然后显示其更新后的值。我觉得使用.load() jquery方法可以刷新具有新编辑值的div,但它不起作用。总之,edit.js.erb可以正常工作,但由于代码中的第二行,update.js.erb无法正常工作。div没有以更新值刷新。是否有人可以提供有关不同方法的指导或让我知道我做错了什么?
编辑:
另一个相关的项目。在Teams控制器中的Team_Params方法:
private
def team_params
params.require(:team).permit(:name, :win, :loss, :tie)
end
team_params
方法。你能把它也展示一下吗? - dimakura