【问题标题】:Boolean logic that will not cooperate不合作的布尔逻辑
【发布时间】:2022-01-26 17:28:06
【问题描述】:

我的网站遇到了一个问题,至少几周以来我一直在努力解决这个问题,所以我希望有人能指出我哪里出错了。对于一些背景知识,我是一名应届毕业生,这是我为我的期末项目构建的顶点项目,在我的演示文稿之前我并没有完全获得我想要的所有功能,现在我已经完成了我正在尝试的课程介绍我认为缺少的功能。话虽如此,我构建了一个带有 Rails 后端和带有引导主题的 Vue 前端的恐怖电影桶列表,我拥有它,您可以在其中将电影添加到监视列表并使其达到可以将它们添加到喜爱它的地步或讨厌它列表,但我最不想看到的是,当您单击按钮将其添加到所述列表时,它会将其从未观看列表中删除。我在后端设置了一个布尔值,但是对于我的生活,我无法正确地逻辑让它从真到假我不知道我是否需要前端的东西或者什么,但就像我说的那样至少两周来一直试图解决这个问题,所以任何帮助都会很棒。

我的架构

  create_table "hatedits", force: :cascade do |t|
    t.integer "movie_id"
    t.integer "user_id"
    t.string "box_art"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end

  create_table "lists", force: :cascade do |t|
    t.integer "user_id"
    t.integer "movie_id"
    t.boolean "watched"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end

  create_table "lovedits", force: :cascade do |t|
    t.integer "movie_id"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.integer "user_id"
    t.string "box_art"
   end

  create_table "movies", force: :cascade do |t|
    t.string "name"
    t.string "description"
    t.string "box_art"
    t.string "sub_genre"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.integer "year"
    t.string "category"
  end

  create_table "users", force: :cascade do |t|
    t.string "name"
    t.string "email"
    t.string "password_digest"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
  end

end 

我的 rails 更新和创建函数(我认为这是问题所在,但我只是看不到它。)

  def create
    list = List.create(
      user_id: current_user.id,
      movie_id: params[:movie_id],
      watched: false,
    )

    if list.save
      render json: list
    else
      render json: {errors: list.errors.full_messages}, status: 406
    end
  end 


  def update
    list = List.find_by(id: params[:id])
    list.movie_id = params[:movie_id] || list.movie_id
    if watched = true
      render json: list
    end 
 
 

    if list.save
      render json: list
    else
      render json: {errors: list.errors.full_messages}, status: 406
    end 
  end 

我的前端带有按钮和方法来移动到不同的列表,但是当它被移动到喜欢它或讨厌它的列表时,它不会从未观看的列表中删除电影,

<template>
  <div class="list">
    <br />
    <br />
    <br />
    <br />
    <br />
    <section id="portfolio" class="portfolio">
      <div class="container">
         <div class="row portfolio-container">
          <div class="col-lg-4 col-md-6 portfolio-item filter-app" v-for="list in lists" 
v-bind:key="list.id">
            <div class="portfolio-wrap">
              <img :src="`${list.movie.box_art}`" />
               <br />

              <div class="portfolio-info">
                <div class="portfolio-links">
                  <button v-on:click="lovedIt(list)">Loved It</button>

                  <br />
                  <br />
                  <button v-on:click="hatedIt(list)">Hated It</button>
                </div>
              </div>
            </div>
          </div>
        </div>
      </div>
    </section>
  </div>
</template>

<style>
.list {
  text-align: center;
  color: white;
}
img {
  height: 624px;
  width: 370px;
}
</style>
<script>
import axios from "axios";

export default {
  data: function () {
    return {
      list: {},
      lists: {},
      movie: [],
      currentUser: localStorage.getItem("user_id"),
    };
  },
  created: function () {
    this.indexLists();
  },
  methods: {
    indexLists: function () {
      axios.get("/lists").then((response) => {
        this.lists = response.data;
        console.log("list", response.data);
      });
    },
    addMovie: function () {
      axios.post("/lists", this.movie).then(() => {
        this.$router.push("/lists");
      });
    },
    lovedIt: function (list) {
      this.list = list;
      axios
        .post("/lovedits", {
          user_id: this.currentUser.id,
          movie_id: this.list.movie_id,
        })
        .then(() => {
          console.log("yo");
          this.$router.push("/lovedit");
          location.reload();
        });
    },
    hatedIt: function (list) {
      this.list = list;
      axios
        .post("/hatedits", {
          user_id: this.currentUser.id,
          movie_id: this.list.movie_id,
        })
        .then(() => {
          console.log("sup");
          this.$router.push("/hatedit");
          location.reload();
        });
    },
  },
};
</script> 

【问题讨论】:

  • 我认为watched = true 应该是watched == true
  • 我同意@Pointy; watched= true 是一个赋值语句。 watched == true 是有条件的。 FWIW,你也可以使用if (watched) {...}

标签: javascript html ruby-on-rails vue.js boolean


【解决方案1】:

可能是您在此处的if 语句中进行分配而不是比较?

  def update
    list = List.find_by(id: params[:id])
    list.movie_id = params[:movie_id] || list.movie_id
    if watched **==** true
      render json: list
    end

【讨论】:

  • 这似乎是正确的答案。欢迎@Greg
  • 我会试一试你会知道我在前端是否需要做任何事情来翻译这个吗?
  • 不能说,@PhilipJobe。试一试,看看效果如何。
猜你喜欢
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-18
  • 2011-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多