我正在尝试创建一个Twitter克隆,其中一条推文在其旁边显示用户的用户名。但是,收到上述错误消息并突出显示我的create方法的第一行。关于如何解决的任何想法。 我已经完成了关联。 谢谢
class TweetsController < ApplicationController
def index
@tweets = Tweet.all.order("created_at DESC")
@tweet = Tweet.new
end
def show
@tweet = Tweet.find(params[:id])
end
def new
# @tweet = Tweet.new
end
def create
@user = User.find(params[:id])
@tweet = Tweet.new(tweet_params)
@tweet.user = @user
if @tweet.save
redirect_to tweets_path
end
end
private
def tweet_params
params.require(:tweet).permit(:content, :user_id)
end
end
<%= simple_form_for @tweet, id: "form-submit" do |f| %>
<%= f.input :content %>
<%= f.button :submit, class: "btn btn-danger" %>
<% end %>
<% @tweets.each do |tweet| %>
<ul>
<li>
<%= tweet.content %>
<%= tweet.user.username %>
</li>
</ul>
<% end %>
答案 0 :(得分:1)
您的表单没有id
字段,因此params[:id]
是nil
。
答案 1 :(得分:0)
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
或
除了上面的内容外,您还可以从表单中传递一个user_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 %>
然后将创建操作修改为
def create
@tweet = Tweet.new(tweet_params)
if @tweet.save
redirect_to tweets_path
end
end
注意:假设您正在使用devise gem进行身份验证
答案 2 :(得分:0)
您在使用tweet_params后定义了tweet.users,因为未定义tweet_params用户,这就是为什么出现此错误的原因。
答案 3 :(得分:0)
通过在此处接受答案,最合适的更改可能是:
def new
@tweet = current_user.tweets.new
end
def create
@tweet = Tweet.new(tweet_params)
if @tweet.save
redirect_to tweets_path
end
end
不需要做任何其他事情。