我需要一些關於如何在沒有實際加載頁面的情況下使用Jquery/Ajax更新頁面上的div的指導。在我提出這個問題之前,我會提供一些必要的信息。在rails中,使用Jquery/Ajax更新div
我有兩個型號:
Scoreboard
型號(has_many :teams
)Team
型號(belongs_to的scoreboard
)
在scoreboard#show
頁,我已經使部分顯示全部@scoreboard.teams
。
的部分顯示了所有在如下面的代碼的詳細單獨的div團隊:
<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請求,其要求,帶來了一個表格編輯一個團隊,然後表格在提交時調用團隊控制器中的更新方法。爲了進一步澄清,這裏是有關的代碼:
團隊控制器方法編輯和更新:
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_<%[email protected]%>").hide();
$("#team_<%[email protected]%>").after("<%= j render 'teamedit'%>");
因此,點擊edit_path鏈接按鈕後,編輯團隊的div將被隱藏,並在其後立即生成一個表格。
update.js.erb
$("#edit_team_<%[email protected]%>").hide();
$("#team_<%[email protected]%>").load("scoreboards/show.html.erb"); #help needed here
$("#team_<%[email protected]%>").show();
現在,當更新控制方法表單提交後調用,形式是隱藏與jQuery,我想重新加載組的div我躲到之前,然後用它的更新值顯示它。
我覺得像.load()jquery方法將與新編輯的值刷新div相關,但它不起作用。總之,edit.js.erb工作正常,但update.js.erb由於代碼中的第二行不起作用。 div沒有被更新的值刷新。任何人都可以提供一些不同方法的指導,或讓我知道我在做什麼錯了?
編輯:
另一個相關項目。Team_Params方法在團隊控制器中:
private
def team_params
params.require(:team).permit(:name, :win, :loss, :tie)
end
謝謝您的回覆。我按照你的指示做了,表格被隱藏起來,div重新顯示。但是,當div顯示時,它仍然具有@team的舊值,而不是輸入到編輯表單中的值。還有什麼我可能做錯了? – kpaul
我唯一能想到的就是你的'team_params'方法。你也可以展示它嗎? – dimakura
私人在這裏沒有問題。它在別的地方。很難說。如果你可以分享你的項目,那麼識別出什麼問題會很快。 – dimakura