[英]Rails One to Many association, adding data to many using post ajax
我在Rails中有一個一對多的協會。 歌曲有很多頻道,頻道屬於歌曲。 我正在嘗試用6個頻道創建一首新歌。 這是我前端的表格:
$.ajax({
type : "POST",
url: ,url
dataType : 'json',
data : $("#form").serialize(),
success : function(data) {
var newSong = new Object();
newSong.song_name = data.sn;
newSong.singer_name = data.ss;
newSong.genre = data.sg;
newSong.channels[0].url=data.u1;
newSong.channels[1].url=data.u2;
newSong.channels[2].url=data.u3;
newSong.channels[3].url=data.u4;
newSong.channels[4].url=data.u5;
newSong.channels[5].url=data.u6;
},
error : function(result) {
console.log(result);
},})});});
</script>
</head>
<body>
<form id="form" action="" method="post">
Song Name: <input id="sn" type="text" name="song_name"><br><br>
Singer Name: <input id="ss" type="text" name="singer_name"><br><br>
Genre: <input id="sg" type="text" name="genre"><br><br>
Url 1: <input id="u1" type="text" name="url"><br><br>
Url 2: <input id="u2" type="text" name="url"><br><br>
Url 3: <input id="u3" type="text" name="url"><br><br>
Url 4: <input id="u4" type="text" name="url"><br><br>
Url 5: <input id="u5" type="text" name="url"><br><br>
Url 6: <input id="u5" type="text" name="url"><br><br>
<input id="submit" type="button" name="submit" value="submit">
</form>
從我的代碼中可以看到,我的表單字段具有名為url的所有輸入,這會導致問題,但是當我更改名稱時,后端無法將其識別為允許的參數。這是我的歌曲控制器創建動作:
def create
@song = Song.new(song_params)
@song.save
@ch1 = Channel.new(channel_params1)
@ch1.song_id=@song.id
@ch1.save
@ch2 = Channel.new(channel_params2)
@ch2.song_id=@song.id
@ch2.save
@ch3 = Channel.new(channel_params3)
@ch3.song_id=@song.id
@ch3.save
@ch4 = Channel.new(channel_params4)
@ch4.song_id=@song.id
@ch4.save
@ch5 = Channel.new(channel_params5)
@ch5.song_id=@song.id
@ch5.save
@ch6 = Channel.new(channel_params6)
@ch6.song_id=@song.id
@ch6.save
respond_to do |format|
if @ch6.save
format.html { redirect_to @song, notice: 'Song was successfully created.' }
format.json { render :show, status: :created, location: @song }
else
format.html { render :show }
format.json { render json: @song.errors, :status => :unprocessable_entity }
end
end
end
private
# Use callbacks to share common setup or constraints between actions.
def song_params
params.permit(:song_name, :singer_name , :genre)
end
def channel_params1
params.permit(:url)
end
def channel_params2
params.permit(:url)
end
def channel_params3
params.permit(:url)
end
def channel_params4
params.permit(:url)
end
def channel_params5
params.permit(:url)
end
def channel_params6
params.permit(:url)
end
end
注意:我的操作成功設置了一個URL,但是所有6個通道的URL都設置為最后一個表單條目,因此我為所有6個通道獲得相同的URL。
正如您所推論的,您輸入的名稱不正確。 我沒有建立您未使用模板或Rails視圖的連接。 命名的技巧是在名稱中包括索引:
<input id="u1" type="text" name="url[0]">
<input id="u2" type="text" name="url[1]">
等等。 Rails會為您將這些字符串分組為一個字符串數組,類似於:
{ url: ["your.first.url", "your.second.url,...]}
當然,除了參數之外,還有更多的東西-您還將擁有包裝這些東西的渠道。 我對您的模型的總體形狀沒有任何了解,而這正是決定這種形狀的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.