Я попробовал несколько методов и проверил все существующие вопросы SO, которые я могу найти и не могу найти ответ на проблему. Я новичок в Rails.
У меня есть эти модели:
- Project (has_many WeeklyReflections, has_many ProjectTasks)
- WeeklyReflection (принадлежит проекту)
- ProjectTask (принадлежит_Проекту)
- Стандартная пользовательская модель устройства
Страница показа моего проекта отображает список задач проекта за неделю. Использование simplecalendar.
Я могу переходить вперед и назад на неделю за раз, после чего URL-адрес изменяется с www.site.com/projects/3 на www.site.com/projects/3?start_date=2108-05-30 или www.site.com/projects/3?start_date=2108-05-13, и это показывает все задачи, связанные с этой неделей.
Что я хочу сделать, так это создать для каждой страницы еженедельную запись в журнале, только одну из которых можно создать за неделю, однако у меня возникают проблемы с ее сохранением на контроллере - я пробовал несколько способов, а также пытался поместить его в виде скрытого поля в форме, но все еще не может заставить его работать.
Я поместил start_date: <%= render inline: params[:start_date].inspect %>
и на страницу показа проекта, и в форме он возвращает значение правильно, т.е. "start_date:" 2018-04-28 "" или возвращает ноль, если на странице показа по умолчанию, которая следовало ожидать.
Два метода, которые я попробовал: - получить доступ к параметру start_date через контроллер (в контроллере ниже), а также добавить в форму следующее:
<%= hidden_field_tag(:weekending, params[:start_date]) %>
(я также пытался использовать .to_date, так как я думаю, что возвращаемая строка не в правильном формате)
Однако оба метода возвращают нулевое значение, когда параметр start_date возвращает 2018-04-28 на странице просмотра.
Журнал консоли после действия создания:
Started POST "/projects/6/weekly_reflections" for 2.96.199.78 at 2018-05-07 16:20:14 +0000
Cannot render console from 2.96.199.78! Allowed networks: 127.0.0.1, ::1, 127.0.0.0/127.255.255.255
Processing by WeeklyReflectionsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"UFCXjIp1SZrql2JckHk1HrzDlzO2/WLVwcdvdh+FQKbdrVMfdaivtjS32oLaFwcFs0UcupVP+XV6VVnNwrM0XQ==", "week_reflection"=>{"reflectionentry"=>"adasda", "motivationscore"=>"1", "beliefscore"=>"1"}, "weekending"=>"2018-04-28", "commit"=>"Create Project reflection", "project_id"=>"6"}
Project Load (0.6ms) SELECT "projects".* FROM "projects" WHERE "projects"."id" = ? LIMIT ? [["id", 6], ["LIMIT", 1]]
(0.1ms) begin transaction
(0.1ms) commit transaction
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 2], ["LIMIT", 1]]
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT ? [["id", 2], ["LIMIT", 1]]
(0.1ms) begin transaction
SQL (1.3ms) INSERT INTO "week_reflections" ("reflectionentry", "user_id", "project_id", "motivationscore", "beliefscore", "created_at", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?) [["reflectionentry", "adasda"], ["user_id", 2], ["project_id", 6], ["motivationscore", 1], ["beliefscore", 1], ["created_at", "2018-05-07 16:20:14.957131"], ["updated_at", "2018-05-07 16:20:14.957131"]]
(15.0ms) commit transaction
-
class WeeklyReflectionsController < ApplicationController
before_action :set_weekly_reflection, only: [:show, :edit, :update, :destroy]
before_action :set_project, only: [:new, :edit, :create, :show]
def index
@weekly_reflections= WeeklyReflection.all
end
def new
@weekly_reflection= WeeklyReflection.new
end
def create
@weekly_reflection= @project.weekly_reflections.create(project_reflection_params)
@weekly_reflection.user = current_user
@weekly_reflection.weekending = params[:start_date].to_date || Date.today.beginning_of_week
respond_to do |format|
if @weekly_reflections.save
format.html { redirect_to @weekly_reflection.project, notice: 'Weekly reflection was successfully created.' }
else
format.html { redirect_to @weekly_reflection.project, notice: 'Weekly reflection could not be added.' }
end
end
end
private
def weekly_reflection
@weekly_reflection= WeeklyReflection.find(params[:id])
end
def set_project
@project = Project.find(params[:project_id])
end
def weekly_reflection_params
params.require(:weekly_reflection).permit(:reflectionentry, :weekending, :motivationscore, :beliefscore)
end
end
Страница проекта:
<p id="notice"><%= notice %></p>
start_date:<%= render inline: params[:start_date].inspect %>
<div class="row well">
<div class="col-md-12">
<%= render 'project_detail' %>
</div>
<div class="col-md-12">
<% if @project.user == current_user && @project.active? %>
<br>
<%= render "project_tasks/task_modal" %>
<% end %>
</div>
<div class="col-md-12">
<%= render "project_reflection_calendar" %>
<% if @project.user == current_user && @project.active? %>
<h3>Add your thoughts for this week</h3>
<%= render "project_reflections/form_reflection" %>
<% end %>
</div
Форма WeeklyEntry, показанная на странице показа проекта:
<div class="row">
start_date:<%= render inline: params[:start_date].inspect %>
<%= form_for([@project, @project.weekly_reflections.build]) do |form| %>
<div class="col-md-12 projectform">
<%= form.label "Add your thoughts for this week" %>
<%= form.text_field :reflectionentry, :rows =>2, style: 'width:100%;' %>
</div>
<div class="col-md-7 projectform">
<%= form.label "How motivated are you for your project this week?" %>
<%= form.select :motivationscore, [1,2,3,4,5,6,7,8,9,10], class:"form-control" %>
</div>
<div class="col-md-7 projectform">
<%= form.label "How strongly do you believe you will reach your project?" %>
<%= form.select :beliefscore, [1,2,3,4,5,6,7,8,9,10], class:"form-control" %>
</div>
<%= hidden_field_tag(:weekending, params[:start_date].to_date) %>
<div class="col-md-12 projectform">
<%= form.submit class:"btn btn-primary" %>
</div>
<% end %>
</div>
Код заявления приложения:
class WeeklyReflection < ApplicationRecord
belongs_to :project
belongs_to :user
validates :reflectionentry, presence:true, length: {minimum:3, maximum: 540}
#required for simple_calendar
def start_time
self.weekending
end
end
class Project < ApplicationRecord
has_many :project_tasks, dependent: :destroy
belongs_to :user
has_many :weekly_reflections, dependent: :destroy
end
=> Схема еженедельного отражения:
(id: integer, reflectionentry: text, user_id: integer, project_id: integer, weekending: date, motivationscore: integer, beliefscore: integer, created_at: datetime, updated_at: datetime)