Ruby on rails 尝试创建推文时出现错误“找不到没有ID的用户”

Ruby on rails 尝试创建推文时出现错误“找不到没有ID的用户”,ruby-on-rails,ruby,erb,Ruby On Rails,Ruby,Erb,我正在尝试制作一个twitter克隆,其中一条tweet会在其旁边显示用户的用户名。但是,获取上述错误消息并突出显示create方法的第一行。关于如何解决的任何想法。 我已经做过了。 谢谢 推特 您的表单没有id字段,因此params[:id]为零。params哈希不包含id,因此您将收到此错误 只需将创建操作修改为 def create @user = current_user @tweet = Tweet.new(tweet_params) @tweet.user

我正在尝试制作一个twitter克隆,其中一条tweet会在其旁边显示用户的用户名。但是,获取上述错误消息并突出显示create方法的第一行。关于如何解决的任何想法。 我已经做过了。 谢谢

推特

您的表单没有id字段,因此params[:id]为零。

params哈希不包含id,因此您将收到此错误

只需将创建操作修改为

  def create
    @user = current_user
    @tweet = Tweet.new(tweet_params)
    @tweet.user = current_user
    if @tweet.save
      redirect_to tweets_path
    end
  end
  def create
    @tweet = Tweet.new(tweet_params)
    if @tweet.save
      redirect_to tweets_path
    end
  end

您还可以从表单中传递一个用户id,而不是上述内容

<%= simple_form_for @tweet, id: "form-submit" do |f| %>
   <%= f.input :content %>
   <%= f.hidden_field :user_id, value: current_user.try(:id) %>
   <%= f.button :submit, class: "btn btn-danger" %>
<% end %>

注意:假设您使用Desive gem进行身份验证

您在使用tweet_参数后定义了tweet.users,因为tweet_参数未定义用户,所以您会出现此错误。

根据此处接受的答案,最合适的更改可能是:

  def new
    @tweet = current_user.tweets.new
  end

  def create
    @tweet = Tweet.new(tweet_params)
    if @tweet.save
      redirect_to tweets_path
    end
  end

无需执行其他操作。

对不起,我需要将id添加到表单中?我对这个很陌生,我该怎么做?如果@tweet作为@tweet=current_user.tweets.new在新操作中传递,则thanksIt可能更合适。所有这些混乱都是可以避免的。
  def create
    @tweet = Tweet.new(tweet_params)
    if @tweet.save
      redirect_to tweets_path
    end
  end
  def new
    @tweet = current_user.tweets.new
  end

  def create
    @tweet = Tweet.new(tweet_params)
    if @tweet.save
      redirect_to tweets_path
    end
  end