【发布时间】:2019-01-15 15:50:58
【问题描述】:
我正在为我的学生创建一个小项目,但我遇到了一条错误消息我已经尝试了所有可能的解决方案,但没有取得进展。
图像是各种模型以及我如何实现各自的关联。以及 Create 的控制器方法和允许的参数。
我可以从我的服务器活动中清楚地看到所有属性值都已被捕获,但您收到一条错误消息,提示 “活动必须存在”。
如果有人帮助我,我会很高兴。
提前致谢
问题更新
HTML 表单
<%= form_with(model: user_activity, local: true) do |frm| %>
<div class="field">
<%#= frm.label :activity_id %><br />
<%= select_tag 'activity_id', options_for_select(Activity.all.collect{ |u| [u.activity_name, u.id] }) %>
</div>
<div class="field">
<%= frm.label(get_user_activity_date) %><br />
<%= frm.date_field :user_activity_date, autofocus: true%>
</div>
<div class="field">
<%= frm.label(get_user_activity_start_time) %><br />
<%= frm.time_field :user_activity_start, autofocus: true %>
</div>
<div class="field">
<%= frm.label(get_user_activity_end_time) %><br />
<%= frm.time_field :user_activity_end, autofocus: true, autocomplete: "age" %>
</div>
<div class="field">
<%= frm.label(get_user_activity_note) %><br />
<%= frm.text_area :user_activity_note, autofocus: true %>
</div>
<div class="actions">
<%= frm.submit %>
</div>
<% end %>
服务器日志
Started POST "/user_activities" for 127.0.0.1 at 2019-01-16 06:45:44 +0100
Processing by UserActivitiesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"qfcYksfgoAzNaO4ZQ6rsG9WFV6waUywbsaOCTePsjpV4PmXp0tofWfS01as6ArrdwyNtthCt5aLs2tNXavD/7A==", "activity_id"=>"3", "user_activity"=>{"user_activity_date"=>"2018-12-31", "user_activity_start"=>"12:02", "user_activity_end"=>"22:02", "user_activity_note"=>"Record User Activity"}
仍在努力解决问题
我已经尝试了您的大部分建议,但仍然没有进展,但是当我按照以下代码中的指示尝试以下操作时,我得到了一个奇怪的结果,但无法插入到数据库中
def new
@user_activity = UserActivity.new
end
def create
# @user_activity = UserActivity.new(user_activity_params)
activity_id = user_activity_params[:activity_id] #fetch this value from params as it comes
puts "The activity ID which is received is -> #{activity_id.to_i}"
# puts current_user.user_id
user_activity_date = user_activity_params[:user_activity_date]
puts "Date -> #{user_activity_date}"
user_activity_start = user_activity_params[:user_activity_start]
puts "Start Time -> #{user_activity_start}"
user_activity_end = user_activity_params[:user_activity_end]
puts "End Time -> #{user_activity_end}"
user_activity_note = user_activity_params[:user_activity_note]
puts "Activity Note -> #{user_activity_note}"
@user_activity = current_user.user_activities.new(activity_id:activity_id.to_i, user_activity_date: user_activity_date.to_date,user_activity_start: user_activity_start.to_time,user_activity_end: user_activity_end.to_time, user_activity_note: user_activity_note )
end
参数
def user_activity_params
params.require(:user_activity).permit(:activity_id, :user_activity_date, :user_activity_start, :user_activity_end, :user_activity_note)
# params.fetch(:user_activity, {}).permit(:user_id, :activity_id, user_activity: [:user_activity_date, :user_activity_start, :user_activity_end, :user_activity_note])
# params.permit(:user_id, :activity_id, :user_activity_date, :user_activity_start, :user_activity_end, :user_activity_note)
end
服务器日志
Started POST "/user_activities" for 127.0.0.1 at 2019-01-16 21:15:48 +0100
Processing by UserActivitiesController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"7v79xk6TW0IHNjkno+iXwzIYqqBjBMxCSodddPHUmKI/N4C9W6nkFz7qApXaQMEFJL6Qumn6BfsX/gxueMjp2w==", "user_activity"=>{"activity_id"=>"1", "user_activity_date"=>"2019-01-15", "user_activity_start"=>"20:14", "user_activity_end"=>"21:15", "user_activity_note"=>"testing to see if values can be retrieved"}, "commit"=>"Create User activity"}
Activity ID -> 1
Date -> 2019-01-15
Start Time -> 20:14
End Time -> 21:15
Activity Note -> testing to see if values can be retrieved
User Load (0.9ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
↳ app/controllers/user_activities_controller.rb:46
(0.5ms) BEGIN
↳ app/controllers/user_activities_controller.rb:46
UserActivity Create (3.0ms) INSERT INTO `user_activities` (`created_at`, `updated_at`, `user_id`) VALUES ('2019-01-16 20:15:49', '2019-01-16 20:15:49', 1)
↳ app/controllers/user_activities_controller.rb:46
(0.5ms) ROLLBACK
↳ app/controllers/user_activities_controller.rb:46
Completed 500 Internal Server Error in 125ms (ActiveRecord: 12.4ms)
ActiveRecord::NotNullViolation (Mysql2::Error: Field 'user_activity_date' doesn't have a default value: INSERT INTO `user_activities` (`created_at`, `updated_at`, `user_id`) VALUES ('2019-01-16 20:15:49', '2019-01-16 20:15:49', 1)):
app/controllers/user_activities_controller.rb:46:in `create'
【问题讨论】:
-
你如何将数据属性传递给 user_activity,我看到构建时没有调用任何参数。 user_activity_params 方法也存在于 user_activity_controller? 中。模型代码看起来不错,同时在控制器中创建 user_activity 确保活动 id 和用户 id 存在。
-
请不要发布图片,而是发布格式化文本。
-
-
@Bijendra 请 create 和 user_activity_params 方法都在 UserActivity 控制器内。我正在使用上面的 html 将 Activity 对象 id (activity_id) 传递给控制器。
-
@BismarkAttaFrimpong 您正在将 activity_id 传递给控制器,现在您需要确保 activity_id 从控制器传递到数据库。缺少那部分代码。打开 Rails 控制台,执行下面的代码来了解一下。 1>user = User.last 2> obj1 = user.user_activities.build 3> obj1.save 是什么错误?现在试试 4> obj2 = user.user_activities.build(activity_id: Activity.last.id) 5> obj2.save 这里的 o/p 是什么?对格式感到抱歉。
标签: ruby-on-rails ruby rails-activerecord ruby-on-rails-5.2