在我的Rails 4应用程序中,我有两个模型:
class Calendar < ActiveRecord::Base
has_many :posts
end
class Post < ActiveRecord::Base
belongs_to :calendar
end
这些模型使用浅路线:
resources :calendars do
resources :posts, shallow: true
end
帖子模型有datetime
:date
个自定义属性。
在我的日历控制器中,除了默认操作之外,我还有一个自定义Calendars#Calendar_view
操作,用于替代常规Calendars#Show
操作。
在这两个视图中,我们列出了属于当前日历的所有帖子:
def show
@posts = @calendar.posts
end
def calendar_view
@posts = @calendar.posts
end
允许用户从应用中的一个Posts#New
视图创建新帖子,但他们可以从应用中的多个位置访问此视图。
例如,我在Calendars#show
标题中有创建新帖子按钮,Calendars#Calendar_view
标题中有另一个按钮
此外,在Calendars#Calendar_view
视图中,使用simple_calendar
gem来显示日历中的帖子,我有以下代码:
<%= month_calendar events: @posts do |date,posts| %>
<%= content_tag :div, data: {date: date, calendar_id: @calendar.id} do %>
<%= date.strftime('%e') %> <span id="calendar_view_plus_sign"><%= link_to '<i class="glyphicon glyphicon-plus-sign"></i>'.html_safe, new_calendar_post_path(@calendar) %></span>
<% posts.each do |post| %>
<div class="single_event">
<%= link_to post.subject, post_path(post) %>
</div>
<% end %>
<% end %>
<% end %>
其中给出了以下视图,在悬停时每个日历单元格中出现绿色的“加号”符号:
- - - -
注意 :看起来上面的gif上没有出现绿色的“加号”标志,但正如您在图片的左下角所看到的那样(在循环结束时),显示发布/新建的路径。
- - - -
我现在要完成的是从用户单击绿色按钮的单元格中获取日期,并将其传递给Posts#New
表单。
理想情况下,在Posts#New
表单中,datetime_select
字段会填充我们在日历#Calendar_view和当前date
中抓取的time
。< / p>
(我们不需要将任何自定义time
传递给表单,只需要传递给当前time
,就像现在的情况一样。)
但是当用户从应用程序中的其他链接访问表单时,我不希望将任何日期传递到Posts#New
表单(请参阅上面的应用程序中可用的所有链接列表{{1形式)。
我怎样才能做到这一点?
- - - -
更新:我尝试更新Posts#New
视图中绿色“加号”标记的链接,如下所示:
Calendars#Calendar_view
这种工作,因为新生成的链接如下所示:
<%= link_to '<i class="glyphicon glyphicon-plus-sign"></i>'.html_safe, new_calendar_post_path(@calendar, date: date) %>
但是,在http://localhost:3000/calendars/1/posts/new?date=2016-01-08
表单中,正确的日期不会出现在日期时间选择字段中,该字段仍设置为默认的当前日期和时间。
知道如何让表单显示我们通过网址的日期吗?
- - - -
更新2 :我认为现在的挑战是在Posts#New
行动中获取:日期参数。
我试过了:
Posts#New
但它会产生以下错误:
@post.date = post_params[:date] unless post_params[:date].empty?
我也尝试过:
ActionController::ParameterMissing in PostsController#new
param is missing or the value is empty: post
和
date = params[:date] unless params[:date].empty?
但是使用此代码,表单仍然无法获取正确的日期。
关于如何使这项工作的任何想法?