Ich benutze Devise als mein Authentifizierungssystem und einfache Form. Ich erhalte einen NoMethodError in Groups # show und einen undefined method 'name' for nil:NilClass
Fehler. Ich verwende Modellassoziationen, um die Gruppen und Beiträge zu verknüpfen. Wenn ich puts post.user.name
mache, zeigt es richtig in meinem Terminal an, aber diese Linie verursacht den oben genannten Fehler und es referenziert Groups # Show aus irgendeinem Grund. Irgendwelche Gedanken?Rails-Simple Form und Devise current_user Problem bei der Verwendung von Modellassoziationen
Routen
resources :groups do
resources :posts
end
Gruppenmodell
class Group < ActiveRecord::Base
validates :user_id, presence: true
belongs_to :user
has_many :posts
has_many :comments
has_many :attachments
end
Beitrag Modell
class Post < ActiveRecord::Base
validates :user_id, presence: true
validates :caption, presence: true
belongs_to :user
belongs_to :group
has_many :comments, dependent: :destroy
end
Group Controller
class GroupsController < ApplicationController
before_action :authenticate_user!
def new
@group = current_user.groups.build
end
def create
@group = current_user.groups.build(group_params)
@group.user_id = current_user.id
if @group.save
redirect_to groups_path
else
render :new
end
end
...
private
def group_params
params.require(:group).permit(:group_name, :description, :user_id)
end
end
Beiträge Controllers
class PostsController < ApplicationController
before_action :set_post, only: [:show, :edit, :update, :destroy]
before_action :owned_post, only: [:edit, :update, :destroy]
before_action :authenticate_user!
def index
@posts = Post.paginate(page: params[:page], per_page: 3).order('created_at DESC')
@post = current_user.posts.build
@attachments = Attachment.all
end
...
def new
@post = current_user.posts.build
end
def create
@post = current_user.posts.build(post_params)
@group = Group.find(params[:group_id])
@post.group_id = @group.id
if @post.save
redirect_to groups_path
else
render :new
end
end
...
private
def post_params
params.require(:post).permit(:caption, :user_id)
end
def set_post
@post = Post.find(params[:id])
end
def owned_post
unless current_user == @post.user
redirect_to root_path
end
end
end
Gruppen/show.html.erb
<%= render "posts/index" %>
...
Beiträge/_index.html.erb
<%= render 'posts/form' %>
<%= render 'posts/posts' %>
...
Beiträge/_form.html.erb
<%= simple_form_for([@group, @group.posts.build]) do |f| %>
...
Beiträge/_posts.html.erb
<% @group.posts.each do |post| %>
<%= puts post.user.name %> ISSUE
<%#<%= render 'posts/post', post: post %>
<% end %>
Es scheint in einigen Posts gibt es keinen Benutzer mit diesem verbunden – Thorin
Ich habe <% = puts post.user_id%> als Test, so wenn es user_id gibt es die richtige user_id im Terminal aus, aber wenn ich user_name tun tut es nicht richtig arbeiten. Könnte das ein Problem sein, wenn ich '@post = current_user.posts.build (post_params)' in meiner Post create-Methode mache und Gruppen und Beiträge nicht richtig verkette? – user3318660
Haben Sie den Benutzer manuell gelöscht? und versuchen Sie es einfach mit diesem post.try (: user) .try (: name) – Thorin