在我的Rails 4应用中,我有一个Calendar
和一个Post
模型,使用shallow routes
:
resources :calendars do
resources :posts, shallow: true
end
日历has_many
帖子和帖子belong_to
日历。
通过Posts#New
视图创建新的帖子对象,格式如下:
<%= form_for [@calendar, @calendar.posts.build], html: { multipart: true } do |f| %>
<div class="field">
<%= f.label :date, "DATE & TIME" %>
<%= f.datetime_select :date %>
</div>
[...] # Truncated for brivety
<div class="actions">
<%= f.submit @post.new_record? ? "CREATE POST" : "UPDATE POST", :id => :post_submit %>
</div>
<% end %>
在某些情况下 - 但不是全部 - 我希望使用通过URL传递的参数预填充表单的日期字段。
我已通过以下链接在URL中传递日期:
<%= link_to '<i class="glyphicon glyphicon-plus-sign"></i>'.html_safe, new_calendar_post_path(@calendar, date: date) %>
此链接为我提供了以下类型的网址:
http://localhost:3000/calendars/6/posts/new?date=2015-11-12
从那里,我如何预填表格?
最重要的是,当通过网址传递日期时,如何仅?
答案 0 :(得分:3)
您应该在new
操作
class PostsController << ApplicationController
...
def new
if (date = params['date']).present?
@post = @calendar.posts.build(date: date)
else
@post = @calendar.posts.build
end
end
...
end
在你看来
<%= form_for [@calendar, @post], html: { multipart: true } do |f| %>
<div class="field">
<%= f.label :date, "DATE & TIME" %>
<%= f.datetime_select :date %>
</div>
[...] # Truncated for brivety
<div class="actions">
<%= f.submit @post.new_record? ? "CREATE POST" : "UPDATE POST", :id => :post_submit %>
</div>
<% end %>
答案 1 :(得分:1)
偏离主题:您可能希望使用link_to
的块语法而不是使用html_safe?
<%= link_to new_calendar_post_path(@calendar, date: date) do %>
<i class="glyphicon glyphicon-plus-sign"></i>
<% end %>