在Rails应用程序中,有一个用户模型,而用户有很多单词。有一个包含许多项目的表(在项目控制器中显示动作),每个项目由具有单词和链接(将用于创建记录)的行表示。如何使用AJAX根据行数据创建与用户关联的单词记录?例如,该行包含单词“ test”,并且单击链接时,应创建新的Word记录并将其附加到当前用户的单词之后。
我试图给每个链接remote: true
属性并在show.js.erb中发出AJAX请求(因为链接在show动作中),每次单击该链接时都会调用它,但是无法找出单击哪个链接,因此我无法从该行中提取任何信息。
AJAX请求如下所示:
$.ajax({
type: "POST",
url: "/users/<%= current_user.id %>/words/",
data: { word: { word: word, translation: translation, context: context } },
});
在WordsController中创建动作:
def create
@words << Word.new(filter_params)
redirect_to user_words_path
end
任何帮助将是巨大的。
在rails中,您可以放置remote: true
任何链接以使其ajax-y。就您而言,这似乎是问题在于您没有到create action的合法链接。因此,您需要的是:
首先:Words控制器中的create动作:
def create
@word = Word.new(word_params)
@word.user = current_user
@word.save!
end
...
private
def word_params
params.require(:word).permit(:word, :translation, :context)
end
第二:指向页面上的create操作的链接:
<%= link_to(
"Test",
words_path(word: "Test", translation: "foo", context: "bar"),
method: :post,
remote: true
) %>
要点是:
words_path
,这是单词资源的帮助方法。post
为通知您的控制器您要执行该create
操作。您可以通过运行找到辅助程序和方法到控制器操作的映射rake routes
。
一些警告:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句