【问题标题】:How should my form look in Rails?我的表单在 Rails 中应该如何显示?
【发布时间】:2012-02-14 15:34:44
【问题描述】:

我已经命名了两个模型。一个模型TopicPost 模型的父模型,PostTag 模型共享HABTM 关系。没有一个模型有验证。

我想收集使用复选框来设置主题和标签模型上的数据,同时以单个表单提交帖子。任何时候我都尝试过,但是我遇到了this problem

我的问题:

  • 我应该如何扩充我的表单、控制器和模型以避免在this post 中发现的错误?
  • 我需要在每个redirect_to 中声明我的命名空间吗?

控制器代码

before_filter :check_authentication, only: [:new]
before_filter :fetch_author, only: [:new, :create]
before_filter :fetch_post, only: [:show, :update, :edit, :destroy]
before_filter :fetch_topic, except: [:create]

def new
 @topic = Topic.all
 @post = @user.posts.build
 @tag = @post.tags.build
end

def create
 @post = @user.posts.build(params[:post])
 @topic = @post.topic.build(params[:post])
   respond_to do |format|
    if @post.save
     format.html { redirect_to [@topic, @post], notice: 'Post was successfully created.' }
    else
     format.html { render action: :new }
    end
 end
end

 def update 
   if @post.update_attributes(params[:post])
   redirect_to [@topic, @post], notice: 'Post was successfully updated.' 
 else 
   render :edit
 end
end

def destroy
 @post.destroy
 redirect_to root_url([@topic, @post]), notice: 'Post deleted.'
end


private 
 def fetch_author
  @user = User.find(session[:user_id])
 end 

 def fetch_topic
  @topic = Topic.find(params[:topic_id])
 end

 def fetch_post
  @post = @topic.posts.find(params[:id])
 end

这是我的表格

<%= form_for([:blog, @topic, @post]) do |f| %>
  <div class="field">
   <%= f.label :title %><br />
   <%= f.text_field :title %>
  </div>

  <div class="field">
   <%= f.label :content %><br />
   <%= f.text_area :content, sanitize: true, rows: 15%>
  </div>

  <div class="field">
    <%= f.fields_for(:topic) do |build| %>
     <%= build.label :topic_name, "Select a topic" %>
     <%= collection_select(:post, :topic_id, Topic.all - [@post], :id, :topic_name, prompt: true) %>
    <%end%>
   </div>

  <div class="field">
   <%= f.fields_for(:tags) do |build| %>
            <%= unless build.object.new_record?
                build.check_box('_destroy') + build.label('_destroy', 'Remove Tag') 
            end%>
    <%= build.label :tag_name, "Add Tag"%>
    <%= build.text_field :tag_name %>
        <%end%> 
</div>

   <div class="actions">
    <%= f.submit %>
   </div>
  <% end %>

【问题讨论】:

    标签: ruby-on-rails activerecord views


    【解决方案1】:

    是的,如果您想要这种类型的嵌套 URL,您需要在每个 redirect_to 中定义您的命名空间。如果你没有这个命名空间,你就不能有这个嵌套的 URL。

    【讨论】:

    • 谢谢,对我的主要问题的任何想法都非常感谢。
    猜你喜欢
    • 2014-02-14
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多