从一个控制器/视图将数据插入到多个表中[Rails 4]

林西里亚

我对所有令人惊奇的人还有更多好奇的问题!

我正在创建一个论坛,当您创建主题时,您同时也在创建第一篇文章。

我需要将变量分配给某些字段。

例如::user_id => current_user.id,

我的参数设置不正确,因此存储在数据库中时,许多字段为NULL。

楷模

class Topic < ActiveRecord::Base
  belongs_to :forum
  has_many :posts, :dependent => :destroy  
  belongs_to :user
  accepts_nested_attributes_for :posts
end

class Post < ActiveRecord::Base  
  belongs_to :topic  
  belongs_to :user
end

主题控制器

# GET /topics/new
def new
  @topic = Topic.new
  @topic.posts.build
end

def create  
  @topic = Topic.new(topic_params)

  if @topic.save 
    #@topic.responses = Post.new(params[:responses])
    flash[:success] = "Topic Posted"
    redirect_to "/forums/#{@topic.forum_id}" 
  else  
    render :new  
  end   
end

def topic_params
  # last_post_at = (:last_post_at => Time.now)
  params.require(:topic).permit(
    :name, 
    :description, 
    [:last_poster_id => current_user.id], 
    [:last_post_at => Time.now], 
    [:user_id => current_user.id],
    :forum_id,
    posts_attributes: [:id, :content, :topic_id, :user_id => current.user.id] )
end

岗位控制器

# GET /posts/new
def new
  @post = Post.new
end

def create  
  @post = Post.new(
    :content => params[:post][:content], 
    :topic_id => params[:post][:topic_id], 
    :user_id => current_user.id)  

  if @post.save  
    @topic = Topic.find(@post.topic_id)  
    @topic.update_attributes(
      :last_poster_id => current_user.id, 
      :last_post_at => Time.now)  
    flash[:notice] = "Successfully created post."  
    redirect_to "/topics/#{@post.topic_id}"  
  else  
    render :action => 'new'  
  end  
end  

_form用于查看/主题

<%= form_for(@topic) do |f| %>
  <% if params[:forum] %>
    <input type="hidden" 
    id="topic_forum_id" 
    name="topic[forum_id]" 
    value="<%= params[:forum] %>" />
  <% end %>  

  <div class="field">
    <%= f.label :name %><br>
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :description %><br>
    <%= f.text_field :description %>
  </div>

  <%= f.fields_for :posts do |p| %>

    <%= p.label :content %><br />
    <%= p.text_area :content %>

  <% end %>
  <%= f.submit :class => "btn btn-primary" %>
<% end %>
理查德·派克(Richard Peck)

您可能正在寻找一个名为:

accepts_nested_attributes_for

您将其放入正在使用的模型中(以Post为例),它将嵌套模型的paeans传递给相应的控制器

关于此有一个很好的RailsCast,我也有一些经验。如果您想让我发布有效的实时代码,请告诉我(我在iPhone上)


现场代码

楷模

#app/models/image_post.rb
belongs_to :post, :class_name => 'Post'
belongs_to :image, :class_name => 'Image'
accepts_nested_attributes_for :image, :allow_destroy => true

#app/models/post.rb
has_many :images, -> { uniq }, :class_name => 'Image', :through => :images_posts, dependent: :destroy
has_many :images_posts, :class_name => 'ImagePost'
accepts_nested_attributes_for :images_posts, :allow_destroy => true

控制器

    def new
            @post = Post.new
            @post.images_posts.build.build_image
    end

    def create
            #Using Inherited Resources Gem
            create! 
    end

    private
    def permitted_params
            {:post => params.require(:post).permit(:title, :body, images_posts_attributes: [:caption, image_attributes: [:image]] )}
    end

形式

<%= form_for [:admin, resource], :html => { :multipart => true }  do |f| %>
        <table class="resource_table">
                <thead>
                        <th colspan="2"><%= params[:action].capitalize %> <%= resource_class %></th>
                </thead>
                <tbody class="form">
                        <% attributes.each do |attr| %>
                                <tr class="<%= cycle('odd', '')%>">
                                        <td><%= resource_class.human_attribute_name(attr) %></td>
                                        <td>
                                                <% if attr == "body" %>
                                                        <%= f.text_area attr, :rows => 60, :cols => 80, :class => "redactor" %>
                                                <% else %>
                                                        <%= f.text_field attr, :value => resource.public_send(attr).to_s %>
                                                <% end %>
                                        </td>
                                </tr>
                        <% end %>
                        <%= f.fields_for :images_posts do |images_posts| %>
                                <%= images_posts.fields_for :image do |images| %>
                                        <tr>
                                                <td>Image</td>
                                                <td><%= images.file_field :image %></td>
                                        </tr>
                                <% end %>
                                <tr>
                                        <td>Caption</td>
                                        <td><%= images_posts.text_field :caption %></td>
                                </tr>
                        <% end %>
                        <tr class="dull">
                                <td colspan="2"><%= f.submit "Go" %></td>
                        </tr>
                </tbody>
        </table>
<% end %>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从一个控制器/视图将数据插入到多个表中[Rails 4]

来自分类Dev

Rails 4将参数从一个控制器传递到另一个

来自分类Dev

Rails 4将参数从一个控制器传递到另一个

来自分类Dev

从Rails 4中的其他控制器/视图将数据保存在表中

来自分类Dev

MVC4如何从一个控制器发布到另一个控制器

来自分类Dev

将值从视图传递到Rails 4中的控制器

来自分类Dev

laravel 4-将多个控制器中的相似数据拉入许多视图

来自分类Dev

我可以在Rails 4中从当前控制器渲染另一个控制器的动作吗?

来自分类Dev

当 4 个查询的数据不唯一时,如何将 4 个查询的数据插入到一个表中?

来自分类Dev

从Ruby on Rails 4中的另一个控制器渲染表单

来自分类Dev

在保存rails 4之前在另一个控制器中调用对象

来自分类Dev

如何将信息从一个视图控制器中的表视图单元传递到另一视图控制器?

来自分类Dev

将Firebase数据从一个视图控制器传递到详细视图控制器

来自分类Dev

MVC4从视图到控制器获取表数据

来自分类Dev

将数组从一个控制器传递到多个视图?Laravel 5

来自分类Dev

有什么适当的方法可以将2个不同的模型从MVC4中的视图传递到控制器

来自分类Dev

MVC 4如何将数据正确地从控制器传递到视图

来自分类Dev

Rails 4:组文本消息策略-将多个记录传递到控制器

来自分类Dev

如何将数据从一个视图控制器传递到另一个视图控制器,并且在视图控制器之间有一个显示视图控制器

来自分类Dev

Rails 4:将变量从控制器传递到javascript

来自分类Dev

从Rails 4中的任何控制器渲染不同的视图

来自分类Dev

将变量从Laravel 4中的其他控制器传递到视图

来自分类Dev

将DropDownList值从视图发布到MVC4中的控制器

来自分类Dev

将值从视图传递到MVC4中的控制器

来自分类Dev

如何在MVC 4中为一个控制器实现面包屑但链接多个动作

来自分类Dev

Rails 4将数据从控制器传递到模型attr_accessor

来自分类Dev

Rails-将参数从一个视图传递到另一个控制器

来自分类Dev

如何使def从同一控制器的另一个def继承Rails 4

来自分类Dev

如何将数据从一个视图控制器传递到导航控制器中嵌入的另一个视图控制器

Related 相关文章

  1. 1

    从一个控制器/视图将数据插入到多个表中[Rails 4]

  2. 2

    Rails 4将参数从一个控制器传递到另一个

  3. 3

    Rails 4将参数从一个控制器传递到另一个

  4. 4

    从Rails 4中的其他控制器/视图将数据保存在表中

  5. 5

    MVC4如何从一个控制器发布到另一个控制器

  6. 6

    将值从视图传递到Rails 4中的控制器

  7. 7

    laravel 4-将多个控制器中的相似数据拉入许多视图

  8. 8

    我可以在Rails 4中从当前控制器渲染另一个控制器的动作吗?

  9. 9

    当 4 个查询的数据不唯一时,如何将 4 个查询的数据插入到一个表中?

  10. 10

    从Ruby on Rails 4中的另一个控制器渲染表单

  11. 11

    在保存rails 4之前在另一个控制器中调用对象

  12. 12

    如何将信息从一个视图控制器中的表视图单元传递到另一视图控制器?

  13. 13

    将Firebase数据从一个视图控制器传递到详细视图控制器

  14. 14

    MVC4从视图到控制器获取表数据

  15. 15

    将数组从一个控制器传递到多个视图?Laravel 5

  16. 16

    有什么适当的方法可以将2个不同的模型从MVC4中的视图传递到控制器

  17. 17

    MVC 4如何将数据正确地从控制器传递到视图

  18. 18

    Rails 4:组文本消息策略-将多个记录传递到控制器

  19. 19

    如何将数据从一个视图控制器传递到另一个视图控制器,并且在视图控制器之间有一个显示视图控制器

  20. 20

    Rails 4:将变量从控制器传递到javascript

  21. 21

    从Rails 4中的任何控制器渲染不同的视图

  22. 22

    将变量从Laravel 4中的其他控制器传递到视图

  23. 23

    将DropDownList值从视图发布到MVC4中的控制器

  24. 24

    将值从视图传递到MVC4中的控制器

  25. 25

    如何在MVC 4中为一个控制器实现面包屑但链接多个动作

  26. 26

    Rails 4将数据从控制器传递到模型attr_accessor

  27. 27

    Rails-将参数从一个视图传递到另一个控制器

  28. 28

    如何使def从同一控制器的另一个def继承Rails 4

  29. 29

    如何将数据从一个视图控制器传递到导航控制器中嵌入的另一个视图控制器

热门标签

归档