Rails 4:将模型参数从父节目视图传递到模型新视图

时间:2015-11-06 03:08:56

标签: ruby-on-rails ruby-on-rails-4 model-view-controller parameter-passing

在我的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 %>

其中给出了以下视图,在悬停时每个日历单元格中出现绿色的“加号”符号:

enter image description here

- - - -

注意 :看起来上面的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?

但是使用此代码,表单仍然无法获取正确的日期。

关于如何使这项工作的任何想法?

0 个答案:

没有答案