【发布时间】:2016-04-10 03:21:04
【问题描述】:
我正在使用可点击图像链接的显示操作填充 bootstrap 4 模式。我目前正在使用 Carrierwave 上传图像。此时,当我单击图像时,仅显示模态叠加层。里面有内容的模态容器根本不显示。
用户/Show.html.erb
<div class= "container">
<div class="username">@user.username</div>
<div class="posts_container_pos">
<hr style="border: 2px solid #515558;">
<%= render 'posts/posts', post_items: @user.posts %>
</div>
</div>
帖子/_Posts.html.erb
<div class"container-fluid">
<%= @post_items.each do |post| %>
<%= link_to image_tag(post.photo.url(:medium), style: 'height: 300px; width: 500px;'), modal_post_path(post), data: {:toggle => 'modal', :target => '#reusable_modal'}, lazy: true %>
<div id="post-modal" class="modal fade"></div>
<!-- Modal -->
<div class="modal fade" id="reusable_modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
</div>
</div>
</div>
<% end %>
<script type= "text/javascript">
$(document).on('page:change', function () {
$(document).on('click', '#reusable_modal [data-dismiss="modal"]',
function (e) {
$(e.target).removeData('bs.modal');
$('#reusable_modal').find('.modal-content').empty();
});
$(document).on('click', '[data-target="#reusable_modal"]', function (e) {
$("#reusable_modal").find(".modal-content").load($(this).attr("href"));
});
});
</script>
</div>
帖子/Modal.html.erb
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
<i><%= image_tag(@post.user.avatar_url(:thumb), class: 'round-image-50') %></i>
<h4 class="modal-title" id="myModalLabel" style="margin-left: 60px; margin-top: -42px;"><%= post.user.username %></h4>
</div>
<div class="modal-body">
<% if @post.photo.present? %>
<%= image_tag(@post.photo.url(:large), style: 'max-width: 570px;') %>
<% end %>
<div class="modal_post_pos">
<%= sanitize content_with_emoji(@post.body) %>
</div>
</div>
<div class="modal-footer">
<%= render partial: 'comments/template', locals: {commentable: @post, new_comment: @comment} %>
</div>
Users_Controller.rb
def show
if params[:id].to_s.match(/^[0..9]+$/) && !User.friendly.exists?(params[:id])
render 'public/404.html', status: 404
else
@user = User.friendly.find(params[:id])
@post_items = @user.posts.paginate(page: params[:page])
end
end
Posts_Controller.rb
def modal
render layout: false
end
def show
@post = Post.find(params[:id])
@new_comment = Comment.build_from(@post, current_user.id, "")
respond_to do |format|
format.html
format.js
format.json {render json: @post }
end
end
Routes.rb
resources :posts, except: [:edit, :update] do
member do
get 'like', to: 'posts#like'
get 'dislike', to: 'posts#unlike'
get :modal
end
end
服务器日志
Started GET "/posts/13/modal" for 127.0.0.1 at 2016-04-11 11:41:00 -0400
ActiveRecord::SchemaMigration Load (0.5ms) SELECT "schema_migrations".* FROM "schema_migrations"
Processing by PostsController#modal as HTML
Parameters: {"id"=>"13"}
User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 5]]
Rendered posts/modal.html.erb (47.5ms)
Completed 500 Internal Server Error in 240ms (ActiveRecord: 1.5ms)
NoMethodError - undefined method `user' for nil:NilClass:
app/views/posts/modal.html.erb:5:in `_app_views_posts_modal_html_erb__227267806_63456696'
【问题讨论】:
-
你的问题是什么??
-
如何在引导模式中加载显示操作。当我点击 link_to show 按钮时,它说的是 nilclass。当我不使用模式时,我会自动转到 show.html.erb 页面。所以,这绝对是模态体本身内部的链接的问题。 不起作用。
-
尝试将所有
show代码添加到modal-body div本身..看看是否有效..不要将其分离到partial -
这似乎行得通。可能是一种混乱的方法,但如果我需要进行更改,至少我知道代码的所有逻辑位于何处。谢谢。
-
那确实是“不是 Rails”的方法,为了实现它,您可能必须将完整的
modal块取出到_post部分..请尝试看看这种方法是否有效。
标签: javascript jquery ruby-on-rails twitter-bootstrap ruby-on-rails-4