我正在使用RoR构建一个Events网站,我刚刚将其升级到v5.0.1(尚未转移到5.1)。我的事件显示页面在页面底部有一个评论部分,到目前为止,它只有一个创建和删除功能。 我想在评论中添加编辑/更新功能,因此只有创建评论的用户才能在他们认为合适的情况下编辑评论。我希望他们能够在同一页面上编辑他们的评论。
我正在尝试使用remote实现这些更改:true& Ajax,而不是依赖于宝石,因为它看起来并不太复杂,但我以前从未这样做过,并且似乎没有通过互联网/ SO的明确指南。这是我的观点&控制器代码 -
comments_controller.rb
def create
@event = Event.find(params[:event_id])
@comment = @event.comments.create!(params[:comment].permit(:name, :body))
@comment.user_id = current_user.id
redirect_to @event
end
def update
@comment.user = current_user
respond_to do |format|
if @comment.update
format.html { redirect_to @comment, notice: 'Comment was successfully updated.' }
format.js { }
format.json { render :show, status: :created, location: @comment }
else
format.html { render :new }
format.json { render json: @comment.errors, status: :unprocessable_entity }
end
end
end
def destroy
@event = Event.find(params[:event_id])
@comment = @event.comments.find(params[:id])
@comment.destroy
redirect_to event_path(@event)
end
_comments.html.erb
<% if user_signed_in? %>
<p><%= link_to "Edit", remote: true %></p>
<p><%= link_to 'Delete', [comment.event, comment],
method: :delete,
class: "button",
data: { confirm: 'Are you sure?' } %></p>
<% end %>
我的理解是我需要在我的views / comments文件夹中包含一个.js.erb文件来处理这个(edit.js.erb?)但是我不清楚的是我需要的javascript代码包含以使其工作。另外,我认为上面的控制器代码看起来不正确 - 这应该在编辑动作中吗?我是否还需要在事件控制器中使用Event#show action,因为它位于视图中?
非常感谢任何协助。
答案 0 :(得分:4)
我意识到这并没有回答你的问题,但希望它能为你解决头痛问题,就像重新发明轮子一样。这也是为什么(我相信)你看到了downvotes。
我不想使用best_in_place gem,因为它似乎暂时没有更新,我不确定它是否最适合Rails 5.0。
宝石不需要让活动仍然有用。通过“一段时间”,你必须意味着“不到24小时前”,因为我在上个月看到了很多活动。一旦宝石解决了它通常很好的去。
https://github.com/bernat/best_in_place/commits/master
Rails 5仍处理POST请求吗?然后它应该工作。 best_in_place比任何东西都更重要。 https://github.com/bernat/best_in_place/tree/master/lib/best_in_place
其中最“令人生畏”的代码是helper.rb文件,该文件呈现挂钩到JS库的HTML。
更新
comments / edit.js.erb文件负责插入表单以编辑评论,例如$('div#new_comment').append('<%= j render 'form' %>');
这假设您在元素/ ID命名方面使用Rails的约定。
如果您有link_to("Edit", edit_comment_path(comment), :remote => true)
,则应自动触发所有内容。
Here's an example repo using Rails 4;对于Rails 5应该是相同的,但(可能)respond_to
块除外?我不确定,还没有使用过Rails 5。只需bundle
,rake db:setup
,然后rails s
;导航至http://localhost:3000/events
并享受。
答案 1 :(得分:0)
你使用edit.js.erb走在正确的轨道上。该文件应该包含用于设置编辑屏幕的JS代码,例如,可能隐藏DIV并显示INPUT或TEXTAREA。
当然,该文件也可以包含Ruby代码,在&lt; %%&gt;内。标签